★★Java質問・相談スレッド182★★
■ このスレッドは過去ログ倉庫に格納されています
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理 http://pc11.2ch.net/hp/
Webプログラミング http://pc11.2ch.net/php/
をご利用下さい。
よくある質問
・「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
(p)ttp://www.wikiroom.com/java/?path,classpath
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
・String に == は使うな。equals() を使え。※
質問時の心得
・コンパイルエラーか実行時エラーか、エラーではないが意図しない動作なのかはっきりしろ。あとエラーメッセージちゃんと読め。
・前提条件としてOS、開発環境、バージョン、使用フレームワーク等を明記。
前スレ
★★Java質問・相談スレッド181★★
https://mevius.5ch.net/test/read.cgi/tech/1518252580/
VIPQ2_EXTDAT: checked:vvvvvv:1000:512:----: EXT was configured >>497
netbeans使ってるわ
動き自体は軽くて快適だよ
apacheに移って将来性良くわからんけどね 5Gの時代だとJAVAの需要って増えるんでしょうか? javaってなんでjavaって名になったんですか? >>506
「私はJavaと命名しました」と当時のOak製品マネージャーであり、現在はMarimba
Inc.のCEOであるKim Polese氏は語ります「私は正確に正しい名前を付けたかった
ので、Javaの命名に多くの時間と労力を費やしました。 このプログラミング言語は非常
にユニークであるため、私はオタク的な名前を避けることにしました。 私は、かっこよ
く、ユニークで、そして綴りが簡単で、言えることが楽しい何かが欲しいと思いました。
「私はチームを部屋に集め、「ダイナミック」、「生きている」、「衝撃」、「衝撃的」
、「革命的」などの単語をホワイトボードに書いて、グループをブレインストーミングに
導いた」とPoleseは言った。 。 「このセッション中に[Java]という名前が登場し
ました。WebRunnerLanguage用のDNA、Silk、Ruby、WRLなどの他の名前には、
yuck!」
So why did they decide to call it Java? | JavaWorld
https://www.javaworld.com/article/2077265/so-why-did-they-decide-to-call-it-java-.html 通知バーのJAVAアイコンからインストールしようとするとかっこがありませんっていう構文エラーが出てきてうんともすんとも言わなくなるんだけど何なの? >>487
よくみたらこれだわ
7でも10でも会社のPCでももれなく起きるわ
公式で何か言ってくれてたりしないのかな ライセンス変更になって、OTNに登録していないとDLできないようになったからじゃね?
どのみち、Java8を最後にJRE単体配布もなくなるし。 仮にそれだとして)がありませんエラーでタスクバーにアイコン表示させっぱなしにするという糞対応する? java silverとるなら8と11どっちがいいんだろ? public <T> T & Cloneable makeItCloneable(final T it) {
return (T & Cloneable) it;
}
みたいなことってどうやったらできるんですか?このソースコードだとマーカーアノテーションのくせにCCEが投げられるんですけど 図書館で2007年出版の参考書借りてきたんですがまだ使えますか? 使ってみたらライブラリDLするところでリンク切れてて実行環境作れませんでした・・・出直してきます
環境変数とドキュメントの入手は成功したんですが古い参考書はダメですね awtは今後もサポートされ続けるの?
打ち切りの話とか出てる? さあ?しかし swing のベースにもなっているので無くなれば swing ごと消滅になると思うよ。 Desktopクラスがawtだから
javaでURLを開いてデフォルトブラウザで開こうとしたらawt必須でしょ?
javafxにDesktopクラスに相当するものがないし
awtはGUIフレームワークというよりもっと広い範囲の機能を持ってしまってる Javaの課題が大量に出たのですがメソッドがうまく理解できず全く進めません
厚かましいですが問題を解いて解説できる方がいらっしゃったらお願いします
https://i.imgur.com/JEjERTW.jpg
https://i.imgur.com/VPD27ce.jpg >>529
どこまで自分でかけたのか晒してくれないと教える気にならん メソッドの書き方自体は問題無いから中身だね
a % b == 0 のときaはbの倍数
これとfor文とif文を組み合わせてカウントして出力しよう DateTimeFormatterについて教えて。
日付を月と日にフォーマットしたいのですが簡単な方法はありませんか?
システムの言語が日本語だったら10月15日で英語(US)だったらOctober 15などと表示したいです。
DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG).format(localDate)とすると
2019年10月15日となってしまって年が不要です。
JDK1.8でandroidアプリです。 ありがとう
簡単にできそうです
OSによって微妙に動作が違うっぽいけどいろいろ使えそう javaとc#で総称型の実装が違うけど
javaのイレージャというのは実際どう思う?
実際書いてるとなんとかなるけど、総称型情報が実行時に取得できないというのは、
処理系の評価としてはどうなんだろうか?
つまりjavaは付け焼刃の中途半端な実装をしているんだろうか?
それともイレージャが理想なんだろうか? SecurityManagerで動的にロードされたプログラムにポリシーを適用するという方法で
「動的にロードされたプログラムはこれらのパッケージ(またはメソッド)にのみアクセスしていい」
というような制限は実現できる? AWTPermissionみたいないろんなパーミッションがあるけど
そもそもある動作がどんなパーミッションを必要とするか?をカスタマイズできるのかどうか。
自分の独自クラスが独自パーミッションを必要とする、という事は可能なのか? そのページにSecurityManagerに関したことは何もないと思うが? >>542
ハッシュの有無で表示されるページが変わる(5chはurl encode/decodeしてないからjumpページでハッシュが消費される)
デスクトップ版のURL
https://wiki.sei.cmu.edu/confluence/pages/viewpage.action?pageId=88487519 今swingでアプリ作ってるんだけど
JButtonで別クラスの処理を呼び出してその進捗をJTextAreaとかに表示させたい場合は引数としてJTextAreaの変数を持たせるのでいいのかな? すまん書き忘れた
一応動いてはいるけどこれが正しい手法なのか知りたい >>545
Observerパターン使うかコールバック関数渡すかして進捗報告のタイミングでコールバックさせる >>547
なるほどありがとう
あとずっと気になってたんだけど
時々コンストラクタじゃなくてそのクラスのstaticメソッド使ってインスタンスを初期化するようなクラスがあるけど
アレってどんな意味があるの? >>548
Effective JavaのItem1なので
「"static factory method" "effective java"」で検索して解説を読むといいと思う >>548
必ずコンストラクタで初期化するものなら、コンストラクタそのものがいらないことに気づかないのか? 間違った。コンストラクタで同じ初期化をされると都合が悪い場合だった。
コンストラクタは常に同じ初期状態を作るために存在しているので、初期状態を複数パターン持ちたい場合は、コンストラクタが邪魔になる。 >>549
ありがとう
ちょっと内容紹介してるブログ読んだけどこの本わかりやすくていいな >>548
実装を隠したい時とかかな。
interface または abstrct クラスを公開して実装したクラスを非公開にして直接 new させない。
しかしどこかで new する必要があるので stasic メソッド作ってそこでやる。 >>553
隠したいってのは知的財産的な意味で?
完全な趣味でやってるからその辺の事情となるとよくわかんないや >>554
例えばLocaleによって実装クラスを変えたい時とか。 コンストラクタは初期化処理部分を明示するために存在しているブロックにすぎない。 以下の場合、オブジェクト指向で考えると、
何をクラスにし、何をメソッドにするのが良いのかを教えてください。
・商品の状態がテキストファイルに記録されていて、それをExcelへ一覧出力します。
テキストには、商品ID、名前、製造日がスペース区切りで記録されていて、
それら情報を毎日、Excelのセルへ入力する部分をjavaで実装します。
・本を読むと、Id、Name等を宣言して、Item.name等で名前を管理すべきかとも思います。
(以下は文法上誤りですが雰囲気として書きます)
class Item{
public void Id()
public void Name()
public void date()
}
今は商品ID、名前、製造日を2次元配列に読み込ませて処理しています。 俺ならこうかな
・商品クラス
・テキストファイルから商品を読み込むクラス
・エクセルに商品を出力するクラス クラスは対象物テキストやエクセル()、
メソッドは動作(読み込みや書き出し)と言う風に作るという事ですか? 書き間違えました。
----
クラスは対象物(テキストやエクセル)、
メソッドは動作(読み込みや書き出し)と言う風に作るという事ですか? 読み込みと書き込みは分けた方がテストしやすいだろうなってだけ
概念的なことは何も考えてない その分け方はオブジェクト指向のクラス分けではなくモジュール分けにすぎないが否定はしない。 >557です
単に手続きを分けるだけなら考えついたのですが、
ちょっとオブジェクト指向ではないと思っています。
商品というオブジェクトをどう管理するのかが
肝だと思うんですが、言い分け方ないでしょうか。 >>563
スペース区切りのデータをCSVにしてExcelで管理してる台帳に追記するだけだと理解したんだけど、もしそうなら商品をオブジェクトとして扱う価値はあんまりないよ
それ以上の処理かあるのかな? 例えば名前、製造日についてビジネスルールに沿ったバリデーションがあったり、DBに保存や専用のUIに表示したり、そういう値の中身を意識する必要のある処理 >>564
目的は自分がオブジェクト指向を理解する為です。
簡単な例で理解したいと思いまして。
プログラムをこれ以上修正する要件はありません。 なるほど勉強用ね
商品と商品たちはそれぞれクラスにする
ItemクラスとItemListクラス
ただし一般的な用件ならjava.util.Listで十分なので商品たちはList<Item>とすればいい
JavaでOOPらしくしたいなら配列はまず使わない
ほかに思考のヒントとしては
ItemクラスとProductクラスを分けてhas-a関係にするとか
商品IDクラスや製造日クラスの導入を検討するなど
製造日クラスも実用上はjava.time.LocalDateあたりで十分
日付の類いをStringのまま取り回すのはやはりOOPらしくはない >>565
オブジェクト指向でもそうじゃなくても、モデルが適切かどうかは、解こうとしてる問題に対しての有用性で判断するもの。
データに「商品」があるからとあってそれをクラスとしてモデリングすべきかどうかは、それが解こうとしてる問題に対して有用がどうかで判断する。
今回のケースではXXXReader、XXXWriter、XXXImporter、XXXConverterみたいなクラスから考えた方が適切。 >>567
その場合、商品データはどうやって管理しますか? >>568
テキストファイル
Javaで書かなくてもをExcelのインポート機能でも似たようなこと出来るよね? Excelには商品クラス定義されてないにも関わらず。
テキストデータの各行を特定の型として捉えないと困るような処理(製造日を特定のルールで加工するとか商品マスタに登録されてないIDはエラーにするとか)がなければ、不必要に入力データの中身に依存せず、汎用的なスペース区切りのテキスト処理として考える。
各行の値に依存した処理が必要なら商品をクラスや構造体にして型として扱うがその場合でもXXXConverterのconvertメソッドのようなプログラムの大枠は変わらないからそっちから先に考えた方がいい。 あくまでも勉強用に小さなデータでクラス概念を理解しようとしているので、
Excelのデータ区切りは考えていません。
聞きたかったのは、テキストデータを読み込むとして
どのようにデータを保持するのかです。
単に配列に入れて管理ならもう作ってあります。
>566さんのやり方で1度作ってみます。 >>570
Readerで読みつつWriterで書き出せばいいから、配列とかにデータを保持する必要ないよ
商品クラスから考えて作りたいならそれでやってみて試行錯誤から学べばいい すみません。
大事なことを言い忘れてました。
商品のデータは1列に書かれていません。
商品名は必ず先頭にあるのですが、その情報は複数行にわかれて書かれています。
例えば、
商品A 重さ 型版
商品A 注文日
など。
しかも商品によって書き方はバラバラで、
唯一の規則性は商品名から必ず始まる事とスペース区切なことです。
商品の情報が何行に記述されるか、
一行に何個情報がスペース区切りされているかは、ランダムとしか言えません。
(本当は規則があるんでしょうけど・・・)
ということで、商品クラスを作って実装しました。
これは配列より暗黙的な部分が少なくていい感じです。
ありがとうございました。
非常に勉強になりました。 moduleでパッケージAを非公開、パッケージBを公開、
パッケージBのクラスのAPIがパッケージAのクラスを返す、
とした場合に外部のプログラムはそのAPIを利用できますか? そんなことできたら、moduleの意味が全くなくなる。
典型的なWrapperパターンの出番(ProxyとかAdapterをBに用意する) >>574
Wrapperクラスを使えば直接対象クラスにアクセスしないからmoduleの制約に引っかからないという事?
>>575
usesとかprovidesで指定されたインターフェースが非公開のクラスを返す場合、
あるいは公開されたクラスを返すとしても返値のクラスのgetterで非公開のクラスが返される場合、
アクセスできるんだろうか?できないんだろうけど。
インターフェースXが公開、実装Yが非公開の場合、YのオブジェクトをXとして使用する事はできるんだろうか?
というのは、良く連鎖的にクラスの依存関係が生じていくわけで、
moduleで外部プログラムとの連携をやろうとしたらほとんどの場合
大量のパッケージを公開設定しなきゃいけないんじゃないか?と。
moduleをうまく使うテクニックみたいなのはあるんだろうか。
例えば公開用インターフェースをまとめたクラスを作ってそれだけを公開するとか?
でも、そのインターフェースから非公開のクラスに辿れてしまったら機能しないんだよな。 JAVAの求人が多いと知り、
就職の為にJAVAを学ぼうと思うんですが、
本屋さんのプログラミング書籍の棚のJAVA本が充実しすぎて困ったぁ!
僕はどれを買えばいいんですかね? >>577
どれを買っても一緒だから独断と偏見で一冊買って最後まで読め
コンピューターサイエンスの本に関して一般的に言えることだが一冊でオールマイティな本なんて存在しないし存在し得ない
何冊か買っては読み買っては読みしていくうちに自ずから獲得するべき知識がわかってくるものだ
ひたすら精進あるのみ Java と言えば、オブジェクト指向を学ぶ、歴史を変えた本!
スッキリわかる Java入門 第2版、2014
この本の大ヒットにより、革命が起きて、
あちこちへ、スッキリシリーズが浸透していった!
たのしいRuby 第6版、2019/3/19
未だに、プログラミング・オブジェクト指向を学ぶには、この2冊がベスト!
ただし、Java の就職は、建設業と同じで、5大SIer を頂点とした土方系!
1社経由するごとに、3割抜かれる!
貴族・奴隷、Waterfall 型、上流・下流の階級制度!
顧客は上流としか、契約を結ばない
一方、Ruby on Rails は、モダンな自社サービスWeb 系だから、抜かれない! >>578
了解です!
今はあまり深く考えないでおきます >>576
exportされたクラスで、
public void X openMethod() {return new Y();}
public void Y openMethod() {return new Y();}
とした場合、
上は全くOK。
下は、client側で”import”しない限りはOK(コンパイルは通ってしまう)。
var変数への代入も可能。
けれどメンバーには一切アクセスできない(こっちはコンパイルエラー)。
export側でコンパイルエラーにならない理由はわからん。 >>582
レスありがとう
じゃあリフレクションでYにアクセスする事はできないけどXとしてYを使用する事はできると。
JPMSはリフレクションでも非公開インターフェースにアクセスできないようにするのが売りだろうから。
リフレクションで任意のクラスにアクセスできないとなると
デバッガみたいなものが作りづらくなりそうだ。
JPMSはやはり納得しづらい感じがある 後者はコンパイル時に問題が見つかりにくくなっているという問題もあるのか。
恐らく後者のコードで実行時にYにアクセスしたら例外が出るはず。
そうじゃなきゃJPMSの意味が無い
直接非公開クラスにアクセスしたらアウト、じゃなくて
非公開クラスである事を知りつつアクセスしたらアウト、という事になるのか。 なんで?
使う側は安全(コンパイルエラー)でしょ。
公開メソッド(たとえばtoString)は普通にアクセスできる。
純粋にimport(Y)できないから、型明示の代入やCastもできない。
あと、ディープリフレクションはexportとは別設定。 メゾットの連続番号を簡略化するのは無理でしょうか?
aho=new baka1();
↑
このbakaのナンバーを変更したいのです
for(int i=1;i<5;i++)aho[i]=new baka+i+();
↑
みたいにするとエラーが出ます
なんかいい方法はないでしょうか? 「メゾット」じゃなくて「メソッド(method)」、
あと
new Hoge();
はメソッドではなくコンストラクタの呼出し。
クラスを動的にインスタンス化したいならリフレクション使う。大雑把に書くと
Class.forName(...) -> clazz.getConstructor(...) -> constructor.newInstance(...)
する。後は自分で調べて。 クラスとかメソッドに連番を振るようなのは、
それぞれのクラスがどういった機能を持つかとか覚えきれなくなるだろうし
ろくな事にならないからヤメとけ、と思いますけどね。
※感想には個人差があります。 >>586
何に使うかさっぱりわからんからエスパーだけど
そういう時は
baka(int i)ってコンストラクタを作ってその中で条件分岐させたほうが良い >>586
ありません。
それと、ゾじゃなくてソだ。 >>587
あそうか。リフレクションでできるか。
しかしうクラス名変わったらおしまいな方法なのでお勧めする気が起きないな。 Javaで、string型のデータをhtml使わずhttpconnection使ってサーバーにつないで、postで送るんですが、springbootで作られたサーバーではどう書けば受け取れますか?
どうやってもうまくいかなくて…説明も下手ですみません。
@Requestparamで受け取れるかと思ったんですが、変数どうやって指定したらいいかとか解決できない状況です Ruby on Rails なら、ルーティングを設定する
Post メソッドで、/login というパスで、Sessions コントローラーのlogin アクション。
post "login" => "sessions#login"
Rails では、下のどちらの書き方でも、params[ :name ] で取り出せる
ttp://〜/コントローラー/アクション/sato
ttp://〜/コントローラー/アクション?name=sato
「spring boot post」で検索して! >>587
コストラクトの連番の簡略化できました。ありがとうございます。
for(int i=1;i<5;i++){
Class<?> c=Class.forName("baka"+i);
aho[i]=c.newInstance();
}
↑
これでできました! ハァ? クラス名の連番?w
メタプログラミングじゃあるまいし、Ruby から、学び直せ!w
Ruby にも、メタプログラミング用で、動的にメソッド名を付ける、define_method は有る。
これは、規則性のあるメソッド名を、複数つける場合に使う
こういう手法は、たいてい「メタプログラミングRuby 第2版」みたいな
「メタプログラミング何々」というような本に書いてある
「メタプログラミング Java」という本は無さそうだけど、リフレクションだろ >>594
でもそれ出来れば設計考え直した方が良いと思うよ。自分では変更不可の領域に連番クラスがあるというのなら仕方ないけど。 aho配列に入れるBakaクラスなら連番でもいいのだ
一人一人のBakaに代入互換性はなく総称しても使い道がない
ただaho配列に並ぶだけ
これでいいのだ >>598
全てのBakaに共通するインターフェースがない限りObjectクラスとしてしか扱えないのであまり価値がないのではないか? 動的にクラス名を生成するのは、Ruby on Rails で言えば、
コマンド「bin/rails g controller コントローラー名 アクション名」で、
例えば、top コントローラー、index アクションなら、
自動的に、ApplicationController の派生クラス名・メソッド名が定義される
class TopController < ApplicationController
def index
end
end
こういうフレームワークを作る側のメタプログラミングだから、10年以上のメンテナー・ベテランの話!
君らは「スッキリわかる Java入門 第2版」にも書いてある通り、
フレームワークを使う側の人でしょ?
1. スッキリなどの入門書
2. Effective 何々、逆引き本
3. フレームワークを使う側の本
4. メタプログラミング、フレームワークを作る側の本
こういう順序で言えば、4は、一生関係ない人がほとんど! >>600
rubyは聞いていません。javaで回答してもらえませんか? ■ このスレッドは過去ログ倉庫に格納されています