X



★★Java質問・相談スレッド180★★ [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2017/04/21(金) 22:13:17.42ID:Sf0TFsly
プログラミング言語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質問・相談スレッド179★★
http://echo.2ch.net/test/read.cgi/tech/1476706523/
0077デフォルトの名無しさん
垢版 |
2017/05/23(火) 21:00:29.01ID:RzWtz9Yc
言わないコンテキストと
言うコンテキストがあるわけだから
お互いのコンテキストをぶつけて消滅させて
人類が滅びれば地球に平和が訪れます
それが真のユートピア
0078デフォルトの名無しさん
垢版 |
2017/05/23(火) 21:00:52.63ID:RzWtz9Yc
地球平和のためのオブジェクト指向
0079デフォルトの名無しさん
垢版 |
2017/05/23(火) 21:29:33.07ID:A5t1zfLR
>>76
文脈考えような
0080デフォルトの名無しさん
垢版 |
2017/05/23(火) 23:45:40.00ID:hoEPyhx6
>>79
あほか
0082デフォルトの名無しさん
垢版 |
2017/05/23(火) 23:55:26.23ID:A5t1zfLR
>>80
常識的に考えて「継承はあまり使わない」って言ったら暗黙的なObject継承は除くやろ
Object継承含んだら、継承率100%になるやん
アスペかよ
0083デフォルトの名無しさん
垢版 |
2017/05/23(火) 23:56:04.61ID:A5t1zfLR
いちいち「暗黙的なObjectクラスの継承以外の継承はあまり使わない」って書けって事か?
0088デフォルトの名無しさん
垢版 |
2017/05/24(水) 07:21:05.75ID:sXHe3Xzk
>>87
いきなりObject
0089デフォルトの名無しさん
垢版 |
2017/05/24(水) 07:25:08.22ID:sXHe3Xzk
相手が言ってることがおかしいと思ったら
相手の前提と自分の前提が違うんじゃないかと思わないと
自分の前提で相手の発言を解釈して相手がおかしいと
いうのは簡単だけど、それって会話が噛み合ってないだけだよね

たしかにJavaのすべてのクラスはObjectを継承するけれども
その意味での継承と、自分はあまり継承を使いませんというときの継承は
概念が異なることに気付けると思うし気づくべきだと思う
0090デフォルトの名無しさん
垢版 |
2017/05/24(水) 07:35:37.60ID:sXHe3Xzk
言葉が同じだから同じことを話しているんだと思うのが危なくて
言葉は同じでも概念が異なることがある

自分の概念を相手が言うことに当てはめておかしかったら置換可能でないということ
継承してはいけないものを継承してる

これがリスコフの置換原則
0091デフォルトの名無しさん
垢版 |
2017/05/24(水) 09:20:49.63ID:IXUmJ/sE
Effective Javaが名著だと聞いて読んでみたことがある
継承より委譲を使うこと、と書いてあって、すぐにクソ本だと見抜いたよ
Objectを継承しないオブジェクトは存在しないが、委譲は必ずしも必須ではない
そんなこともわからない著者が書いた本をありがたがってるんだから、世間のJavaプログラマのレベルなんてお察し
0092デフォルトの名無しさん
垢版 |
2017/05/24(水) 09:25:04.61ID:rgjqqiZm
>>91
中身ちゃんと読んでない事丸分かりでワロタ
なぜ名著と言われてるか分からん頭なのに、なぜ自信満々なのか本当に理解できん
0093デフォルトの名無しさん
垢版 |
2017/05/24(水) 11:52:04.86ID:RPJTgULc
どの言語でも「Effective 何々」という本は、プロ必須本。
ここまで読めば、ひとまず上司に聞きながら、仕事ができるレベル

これ以上のレベルの本は「メタプログラミング 何々」という本。
これは、ライブラリ・言語実装者向けの本

最近の本では、委譲を勧める方が多い。
Web開発を想定して、委譲の方が柔軟性があるから

それに委譲は、コンポーネントの疎結合にも使える

オブザーバー、発行・購読
中央管制塔ありのメディエイター
メッセージキュー
0096デフォルトの名無しさん
垢版 |
2017/05/24(水) 14:14:28.08ID:SSLM/4UF
>>89
自分で気づいて欲しくて遠まわしに言ったんだがな
Javaでは必ず継承してるからリスコフの置換原則は必ず付きまとう
と言うか継承を滅多に使わないとは間違いで上書きしてないだけでメソッドはそのまま継承されてる
そのまま継承しただけではクラスの意味合いによって置換原則に従わないこともある
例えば数値を表すインスタンスのequalsとかそうじゃないか常識的には
new Counter(5).equals(new Counter(5))?
0098デフォルトの名無しさん
垢版 |
2017/05/26(金) 07:24:33.27ID:Mhihnqx0
>>96
自分で分かってないの丸出しだな
equalsは置換原則に反する典型的なメソッドなので例としては最悪
Counterを継承すると適切に機能しなくなる
0101デフォルトの名無しさん
垢版 |
2017/05/26(金) 22:26:51.23ID:/9nVrKkw
>>99
Counter x = new Counter(1);
Counter y = new CounterEx(1, 2);
x.equals(y); //置換原則に従い、型を無視して1番目の値のみを比較するとtrue
y.equals(x); //2番目の値も比較してfalse
これはequalsの対称性を破っている
0102デフォルトの名無しさん
垢版 |
2017/05/26(金) 22:47:17.18ID:/9nVrKkw
補足
対称性を満たすようにCounterEx#equalsの実装を変更しても仕様違反が生じる
Counter x = new Counter(1);
Counter y = new CounterEx(1, 2);
x.equals(y); //置換原則に従い、型を無視して1番目の値のみを比較するとtrue
y.equals(x); //相手がCounterの場合は x.equals(y) の値を返すように実装を変更してtrue
Counter z = new CounterEx(1, 3);
y.equals(z); //当然false
z.equals(x); //y.equals(x)の場合と同じくtrue
これは x = y かつ z = x なら y = z というequalsの推移性を破っている
0105デフォルトの名無しさん
垢版 |
2017/05/28(日) 03:51:45.91ID:lcWhcyEB
質問させてください
メソッドaとbを持つ親クラスがあり、メソッドaは内部で自身のメソッドbを呼んでいるとします
次に親クラスを継承した子クラスを用意し、メソッドaとbの両方をオーバーライドし、メソッドaではsuperで親のaメソッドを呼んでいるとします

この時、子クラスのメソッドaを呼ぶと親と子どちらのbメソッドが実行されるのでしょうか?
0107デフォルトの名無しさん
垢版 |
2017/05/28(日) 09:51:29.08ID:22uH3DrM
>>105
そういう意図せず呼び出し先が書き換えられてしまうトラブルがあるから、
オーバーライドを許すメソッドは極力制限するのが基本
0108デフォルトの名無しさん
垢版 |
2017/05/28(日) 11:43:31.44ID:lcWhcyEB
>>106,107
ありがとうございました
書き換えられてしまうんですね。ちょっと設計見直してみます
0109デフォルトの名無しさん
垢版 |
2017/05/28(日) 12:15:32.64ID:KZ/JXw9A
Javaでは伝統的にあんまりその辺ガチガチに作らないことが多い
継承はなるべくオープンであるべき!スーパークラスが壊れる?そんなのサブクラスの責任でしょ?っていう考原理主義的な考え方がまだ色濃く残っている
C#なんかだとオーバーライドさせたいところだけprotectedな仮想メソッドとして切り出しておいて
それ以外のオーバーライドは一切認めない、みたいなガッチガチな設計をするのが一般的なんだけど
0111デフォルトの名無しさん
垢版 |
2017/05/28(日) 13:22:14.80ID:KZ/JXw9A
Javaでメソッドに軒並みfinal付けると、
上から目線でオブジェクト指向を理解していない馬鹿呼ばわりする奴がいるからなあ
0114デフォルトの名無しさん
垢版 |
2017/05/28(日) 15:33:19.93ID:TqBbmupp
初心者なんだけど、
スカイプとかって、なんという言語で作られてるの?
0117デフォルトの名無しさん
垢版 |
2017/05/28(日) 21:32:06.13ID:QPUrPhGM
>>109
Javaは継承したクラスが別物にしてしまうことを想定してないからな。

形だけ継承して中身を書き換えられるからタチが悪い。
0118デフォルトの名無しさん
垢版 |
2017/05/28(日) 21:34:09.27ID:QPUrPhGM
>>114
高度なWindowsアプリならWindows SDKの可能性が高い。
0122デフォルトの名無しさん
垢版 |
2017/05/28(日) 23:06:34.69ID:QPUrPhGM
>>119
Windows SDKならCかC++なんだよ。知らないなら調べてもの言えよ
0124デフォルトの名無しさん
垢版 |
2017/05/29(月) 00:58:20.59ID:3z87Obs+
>>123
読んできました。
0127デフォルトの名無しさん
垢版 |
2017/06/03(土) 19:56:05.44ID:wtE6TEU1
Googleみたいなウェーイ系の延長と違ってAmazonはエンタープライズITに対してわりと理解があるし
Java開発のAWSへの取り込みを加速させるには悪くないんじゃないかな
0128デフォルトの名無しさん
垢版 |
2017/06/07(水) 19:46:39.66ID:3Fne/ooH
chromeブラウザのF12で表示される「NetWork」タブみたいに
URLにアクセスした際に送受信されるリクエスト全部取得する処理ってどうやれば実現できますか?
たぶんhttpClientかsocketあたり使うと思うけどhttpClientはレスポンスぐらいしか取れないように見える
0131デフォルトの名無しさん
垢版 |
2017/06/08(木) 07:25:25.31ID:wdYocHRg
javacでコンパイルした後、クリーンのようなコマンドで.javaファイルを全て削除することは出来ないでしょうか?
0132デフォルトの名無しさん
垢版 |
2017/06/08(木) 08:07:45.80ID:QV1lsJYM
>>131
放っとけ
現実の開発でjavac手打ちなんてありえないからどうでもいい
mavenやgradleを使おうね
0134デフォルトの名無しさん
垢版 |
2017/06/08(木) 09:09:29.53ID:4Sfj3MXg
>>131
ファイルを消す方法はOSや操作環境によって違う。
Windowsでコマンドプロンプトならdelコマンド、LinuxやMacOSのようなUNIX系OSならrm等でできる。
ただしディレクトリの階層を降りて行って対象のファイルを全て削除したい場合はそれぞれやり方が大きく異なるのでよく調べてからやった方が良い。
確かUNIX系のOSではfindコマンドと組み合わせないとできない。

それとWindowsのエクスプローラは*.javaで検索後にまとめて選択して削除はできるかも知れない。やったことないけど。
0135デフォルトの名無しさん
垢版 |
2017/06/08(木) 11:35:11.82ID:N6bKCzZD
>>134
消すのは.classだけにしてあげて

javacに-dだかつけて特定のとこに出力しといて毎回そこ消せばいい
面倒になってワンライナー書くようになって
色々やりたくなってスクリプト化して
mavenとかみたいなソフトを作ってね
0137デフォルトの名無しさん
垢版 |
2017/06/08(木) 12:24:32.03ID:2+JnwVdz
GridPaneで8×8のマスを作ってGUIのマインスイーパーのアプリケーションを作りたいんだけど
どうやって作ったらいいと思いますか?
0139デフォルトの名無しさん
垢版 |
2017/06/08(木) 13:28:18.05ID:AJC0wjYd
JavaのGUIなんて覚えてもどうせ実際の開発で使う機会はないんだから画面はAAでいいんじゃね
座標を入力してマスを開くようにしたらいい
0140デフォルトの名無しさん
垢版 |
2017/06/08(木) 18:57:54.02ID:wdYocHRg
javacを質問したものですが.javaにコードを書くのですね
初心者の勘違いでした

java能力検定というものを受けてみようと思うのですが、試験ではjavaファイルを修正してjavacでコンパイルしたものを提出するようなのでビルドとクリーンは押さえておきたいと思い

オプションで出来るだろうなと思っていました
0141デフォルトの名無しさん
垢版 |
2017/06/08(木) 19:35:14.41ID:HjFtHmDJ
>>140
何を言ってるのかますますわからん。
0144デフォルトの名無しさん
垢版 |
2017/06/08(木) 23:02:59.28ID:FAwIWNwN
試験のお題が「ファイルを削除するプログラムを作りなさい」だったら笑うな。
0146デフォルトの名無しさん
垢版 |
2017/06/09(金) 15:00:31.56ID:AVL5YzBz
コンパイラとビルドツールの違いがいまいち分かってないのか
というか、コンパイラがコンパイル対象消すって、機能としてはまず入れないと思うぞ
自分がクラスファイルを書き出した根拠を消すって、怖すぎ
0147デフォルトの名無しさん
垢版 |
2017/06/09(金) 19:24:11.51ID:2o9pD8dn
本でしか勉強してないのかな
実践しなよ

それができないなら情報処理技術者試験とかのがいいんじゃないか
0148デフォルトの名無しさん
垢版 |
2017/06/09(金) 21:05:11.77ID:HFELVm93
そういやファイル削除するプログラムは初心者向けのお題としてはいいかも知れんな。
ワイルドカードも使えてオプションでディレクトリを降下して削除することもできるようなやつ。
暇な初心者は作ってみな。
0150デフォルトの名無しさん
垢版 |
2017/06/09(金) 21:50:56.86ID:HFELVm93
Write once, Run once.
0153デフォルトの名無しさん
垢版 |
2017/06/10(土) 01:28:25.17ID:Aw9IeMww
>>149
惜しい。*をエスケープしないとカレントディレクトリに一つjavaファイルがあったらbashに展開されてそのファイル名一つが指定されたことになってしまう。2つ以上あったらfindコマンドがエラーになって動かない。
0154デフォルトの名無しさん
垢版 |
2017/06/10(土) 01:42:53.38ID:Aw9IeMww
それ以前の問題としてOSがUNIX系OSでなければ動かない可能性大か・・・
0157デフォルトの名無しさん
垢版 |
2017/06/10(土) 15:12:22.05ID:Aw9IeMww
>>156
あー。スペース入りファイル名ね。その場合 xargs に -0 が必要になるな。

てか、既に話が Java ではなくなってるな。

そう言えば Java だと1.7以降は java.nio.file.Files#walkFileTree() 使えば楽にできそうだな。
自分で再起処理書く必要がない。
0158デフォルトの名無しさん
垢版 |
2017/06/10(土) 15:15:07.76ID:Aw9IeMww
walkFileTree()はstaticメソッドだった。何もしないでいきなり使える。
0159デフォルトの名無しさん
垢版 |
2017/06/14(水) 06:53:55.92ID:Q+Hg17ig
walkFileTreeは典型的なJavaらしい使い辛さ
なんでプル型(イテレータみたいに利用者側のアクションで取りに行く形のこと)にしなかったのか
ああいうSAXみたいなスタイルのAPIって実装する側は楽かもしれないけど利用者は面倒臭いだけなんだよな
0160デフォルトの名無しさん
垢版 |
2017/06/14(水) 07:08:13.41ID:Q+Hg17ig
Visitorを実装するのが面倒臭いというのももちろんあるけど、
ああいうAPIの一番の問題はスレッドをブロックしやがること
処理を一時中断するにはいちいち別のスレッドを起動しなきゃいけない
0161デフォルトの名無しさん
垢版 |
2017/06/14(水) 07:56:23.35ID:y6/KXvpo
プル型の処理はnewDirectoryStreamやJava8で追加されたfindで可能
結果、
visitorの実装が面倒でブロッキングなwalkFileTree
サブディレクトリを再起処理してくれない上にStreamの名を冠しながらJava8のStreamと互換性のないnewDirectoryStream
メソッド増えすぎて反省したのか手軽なオーバーロードがなく引数の指定が面倒なfind
わずか2バージョンでこの乱立ぶりよ
0162デフォルトの名無しさん
垢版 |
2017/06/14(水) 10:05:21.83ID:gMpitCBj
walkfiletreeは知らないがSAXは便利に使ってる
普段からsedとか使ってるからかな
0165デフォルトの名無しさん
垢版 |
2017/06/14(水) 12:22:31.58ID:y6/KXvpo
>>164
制御を奪われてしまう
>>160の通りだね
プルパーサはラップすることで簡単にSAXを実装できるけど、逆にSAXをベースにプルパーサを実装するのは(シングルスレッドの範囲では)不可能
SAXを好む人を否定はしないけど、少なくとも低レベルAPIとして位置付けるには制限が強くて向いてないんだよ
0167デフォルトの名無しさん
垢版 |
2017/06/14(水) 15:46:33.83ID:y6/KXvpo
>>166
今時は非同期プログラミングの普及でいったん制御をフレームワークへ戻したいケースもよくあるからそんなにおかしな発想ではないぞ
DOMに近い感覚で必要な要素だけを処理できるのも大きなメリットだ
SAXだと、特定の要素に対する処理だけをメソッドに切り出すってのが非常にやりづらい
0170デフォルトの名無しさん
垢版 |
2017/06/14(水) 18:08:39.39ID:QP2Q0Xjx
>>159
walk()もよろしく。
0172デフォルトの名無しさん
垢版 |
2017/06/14(水) 19:04:54.50ID:QP2Q0Xjx
不可能ではないが大変面倒
0173デフォルトの名無しさん
垢版 |
2017/06/14(水) 19:05:27.78ID:QP2Q0Xjx
問題はメモリ食うことかな
0174デフォルトの名無しさん
垢版 |
2017/06/15(木) 18:38:11.28ID:EyGOo2Io
データをソートして出力したいんですが
TreeSetを使うとコンパレータのスコアが重複するデータは上書きされるみたいで
重複を許して保持するようなライブラリってありますでしょうか
0175デフォルトの名無しさん
垢版 |
2017/06/15(木) 18:48:33.62ID:B79jGaPH
ArrayListをソートしてどうぞ
0176デフォルトの名無しさん
垢版 |
2017/06/15(木) 19:00:21.53ID:EyGOo2Io
レスありがとうございます
ArrayListの中にsortらしいメソッドがみあたらないのですが
じぶんでsortアルゴリズムをかかなければいけないということなのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況