13/06/09 20:27:10.93
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理 URLリンク(pc11.2ch.net)
Webプログラミング URLリンク(pc11.2ch.net)
をご利用下さい。
よくある質問
・「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
(p)URLリンク(www.wikiroom.com)
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
前スレッド
★★Java質問・相談スレッド161★★
スレリンク(tech板)
2:デフォルトの名無しさん
13/06/09 21:20:32.65
Javaが理解できない万年雇われ3流PGの老害は見苦しいからもう沸いてくんなよ
3:デフォルトの名無しさん
13/06/09 21:24:53.90
細かいことだが、老害というのは
老いたことが害なのではなく、
老いた者が量産され社会のバランスを
欠いている様が害という考えだ
4:デフォルトの名無しさん
13/06/09 21:25:42.23
クソスレ発見
5:デフォルトの名無しさん
13/06/09 21:32:42.98
Javaは三日で習得した
だが次の三日で見限った
6:前スレの991
13/06/09 21:32:53.13
前スレの
>>995さん
>>996さん
C的というよりC++的なコードありがとうございます。
ちょっと最近C/C++やって無かったので思い出しながらコード見たんですが
で、>>996さんのコード見て
Zow *dive(Zow * zow2) {
zow2=new Zow();
}
Zow * const zow=new Zow();
dive(zow);
をちょっと改変して
Zow *dive(Zow ** zow2) {
*zow2=new Zow();
}
Zow * const zow=new Zow();
dive(&zow);
っていう動作(C++ならコンパイルエラー)をJAVAで実装するのは
無理って事ですか?
7:デフォルトの名無しさん
13/06/09 21:33:16.14
はい無理です
8:KUSO KOTE
13/06/09 21:38:36.37
>>6
Javaには参照渡しが無いので直接的には無理。
代わりに要素数1の配列を使うのがよくあるうんこコード。
Zow[] zow = new Zow[]{new Zow()};
9:KUSO KOTE
13/06/09 21:42:08.64
間違えた。わすれて。
>C++ならコンパイルエラー)をJAVAで実装
10:デフォルトの名無しさん
13/06/09 22:04:36.22
>>6
こんなかんじ?
URLリンク(ideone.com)
11:前スレの991
13/06/09 23:10:00.47
>>10
わざわざありがとうございます。
一応 setZow(Zow z)が抜けてたので補完して・・・
まぁ、質問しまくって、俺みたいな馬鹿で中途半端な知識量でも
private finalの部分は一応わかっていました。
(たぶん、私にわかりやすくと思い書いて頂いたと存じます)
自分の疑問だったのは、static finalのインスタンスをメソッドが
なぜ変更されないのかが疑問だったので。
前スレの>>987さんの説明の参照の値渡し。
っていう説明とC++で書いた例のソースを見してもらって理解しました。
12:デフォルトの名無しさん
13/06/10 10:49:48.70
Oracle、Java向けタイムゾーン更新ツールの無償提供を打ち切る
URLリンク(developers.slashdot.jp)
13:デフォルトの名無しさん
13/06/10 11:09:46.69
グローバルワイドな一流人材はUTCしか使わないから無問題。
どうしてこう、政治家は歴制度をいじりたがるかね
14:デフォルトの名無しさん
13/06/10 13:19:08.13
UTCでしか業務しないエンドユーザーは
世界の一握りしかいないのだが、
その限られた顧客しか相手にしない>>13は
無問題なのだろう
15:デフォルトの名無しさん
13/06/10 16:07:52.19
>>13=キチガイ
16:デフォルトの名無しさん
13/06/10 20:38:21.34
>>1-15 =クソスレ住人
17:デフォルトの名無しさん
13/06/10 21:03:38.04
ム板のどのレス見ても井の中の蛙大海を知らず的なレスばかり
この世のどのプログラマも自分が携わった分野しか知らないんだから
業界全体を知った風なこと言う奴ってどうかしてるわ
>>13とか>>14のことね
18:14
13/06/10 21:06:58.37
>>17お前だけには言われたくないわ
19:デフォルトの名無しさん
13/06/10 21:22:26.57
おまえらみんな自分のしたレスをもっと冷静になって客観的に見るんだ!自分がいかに恥ずかしいレスをしているか!
20:デフォルトの名無しさん
13/06/10 21:24:34.79
他人事のようにというふうにあなたはおっしゃったけれども、私は自分自身を客観的に見ることはできるんです。あなたとは違うんです。そういうことも併せ考えていただきたい
21:桃白白 ◆9Jro6YFwm650
13/06/11 01:49:56.40
>>20
福田さんだ、この人ぜったい福田さんだ。
22:デフォルトの名無しさん
13/06/11 05:56:22.68
>>17
自己紹介乙
23:デフォルトの名無しさん
13/06/11 10:17:04.90
教えてください。
java.lang.Threadクラスのsleepで使っている、システムタイマーと
java.util.Timerで使っているシステムタイマーは同じものですか?
24:デフォルトの名無しさん
13/06/11 11:17:32.73
違うんじゃね?java.lang.Thread#sleep()は、たぶんタイムゾーンもうるう秒もシカトする
25:23
13/06/11 11:23:07.16
>>24
java.util.Timerでシステム時刻を変更すると処理がとまる可能性がある
という記事を見つけて、対策をしないといけないのですが、そうなると
Thread.sleepはどうなんだろうとおもって。
26:デフォルトの名無しさん
13/06/11 12:15:19.31
猪瀬のせいで、多摩川超えると処理が止まるとか、それはやだなぁ
27:デフォルトの名無しさん
13/06/11 18:49:21.32
>猪瀬のせいで
は?
28:デフォルトの名無しさん
13/06/11 20:11:09.31
>>25
API 仕様からはそのような挙動は
許されないように想えるんだけど、
バグなの?
29:デフォルトの名無しさん
13/06/11 21:39:40.47
イマドキのOSをネットに繋いで普通に運用していたら、
システム時刻なんてしょっちゅう変更されているはずなのだけれど?
30:デフォルトの名無しさん
13/06/11 21:49:33.63
JavaSEがCookieやSSLを実装している以上、時計あわせはジャバラーの義務っ
カレンダで試用制限とかしてるアプリ職場に押しつけられると、
カレンダ偽装する奴が増えてトラブルになるんでやめろー
31:デフォルトの名無しさん
13/06/11 22:27:30.64
>>29
どうせ時刻逆転のケースだろ
近代的オペレーティングシステムで
普通それはない
32:デフォルトの名無しさん
13/06/11 23:40:51.41
関数の計算結果を自動的にグラフ作成し 画像として
ホームページなどに表示する手順などを解説している
サイトや著書などを知ってる方おりましたら
おすすめをお願いします。
33:デフォルトの名無しさん
13/06/12 00:21:15.97
三角関数や対数程度でいいのなら「Processing」でアマゾンぐぐれー
34:デフォルトの名無しさん
13/06/12 00:28:24.66
サーバーでgnuplotでも動かせばいいじゃない
Javaで調べるとまずアプレットが出てくると思うけどそれだけはやめとけ
35:デフォルトの名無しさん
13/06/12 00:42:51.42
・HP掲載のJavaとJavaScriptを勘違いして質問している
・HP掲載のJavaAppletでの表示の話
・サーブレットの動的HPの作成の画像作成の話
36:デフォルトの名無しさん
13/06/12 00:44:22.00
JAVAのGUIアプリでグラフ画像とHTML自動生成の話という可能性も微レ存
37:デフォルトの名無しさん
13/06/12 01:18:33.60
グラフならd3かhighchartだな今なら。
38:デフォルトの名無しさん
13/06/12 01:38:51.62
質問するところを間違ってしまったみたいで申し訳ないです
>>33 >>34 >>35 >>36 >>37
ありがとうございます
早速Amazonにあった本や論文などを学校の図書購入希望
やキャットで検索や閲覧希望ぶち込みました。
39:デフォルトの名無しさん
13/06/12 04:18:35.20
Java Platform Standard Edition 7 ドキュメント
URLリンク(docs.oracle.com)
このドキュメントのダウンロードのzipとか無いの?昔は日本語ドキュメントをダウンロードできた気がしたんだけど
40:デフォルトの名無しさん
13/06/12 04:23:23.32
そもそも何で日本語だけこんなに贔屓にするんだろう?日本顧客が結構金蔓なのか?
41:デフォルトの名無しさん
13/06/12 04:24:07.53
まさか日本政府が要求してたり?
42:デフォルトの名無しさん
13/06/12 05:36:13.30
IT後進国の馬鹿な日本ぐいしかもうJava使ってる国が無いんだろう
43:デフォルトの名無しさん
13/06/12 06:22:38.99
日本GUI
44:デフォルトの名無しさん
13/06/12 06:38:49.80
なぜオーバーライドをデフォルトにしたのですか?
継承先にこのメソッドを破壊された場合はどうしようなどと考えるとテスト項目を作るのが億劫です
45:デフォルトの名無しさん
13/06/12 07:04:45.00
そういうOOPのノウハウの多くはそもそもJava開発で蓄積されたものだからだろ
例えば後付けで追加された@Overrideなんか明らかに設計失敗の証拠で、
本来なら後発のC#と同じくoverride修飾子を付けないとコンパイルエラーとするべきだった
昔は継承は既存コード再利用のための強力な仕組みだとか言ってたけど
Javaによって色々問題点が明らかになって今は大分考え方が変わったからな
46:デフォルトの名無しさん
13/06/12 07:17:29.26
>OOPのノウハウの多くはそもそもJava開発で蓄積されたものだからだ
JAVA信者の基地外っぷりもここまでいくと
人としてやばい
47:デフォルトの名無しさん
13/06/12 07:24:36.07
「継承先にこのメソッドを破壊された場合はどうしよう」などと悩むのはどんな
ケースだろう?
オーバーライドされたり派生クラスで実装が与えられたときの振る舞いを注意深く
扱うのはprotectedかabstractなメソッドぐらいであって、その他publicなメソッド
についてはあまり気にしないけれどもなぁ。
いくらオーバーライドを禁止したところでデコレーター使えばいくらでもpublic
メソッドの実装なんて差し替えられるわけだし。
48:デフォルトの名無しさん
13/06/12 07:26:43.77
オーバライドって元々は、既存コードは変更しないというルールの下で
既存コードが変更できないなら上書きすればいいじゃないという考え方が基本だから
後から勝手に何でもかんでもオーバライドできたほうがいいわけ
今ではそういうやり方は糞と考えられてるが
49:デフォルトの名無しさん
13/06/12 07:32:15.56
>>47
publicメソッドを同じクラス内から呼んでる場合があるだろ?
50:デフォルトの名無しさん
13/06/12 08:10:24.00
とりあえずコンストラクタからpublicメソッド呼ぶのやめい
51:デフォルトの名無しさん
13/06/12 11:55:50.72
なんで?
52:デフォルトの名無しさん
13/06/12 12:17:51.42
親クラスプログラマにしてみれば、
コンストラクタぐらい目の行き届くとこでやって欲しいし、
子クラスプログラマにしてみれば、
自分のコンストラクタ始まる前にインスタンスメソッド呼ばれても困る
PMD使えばまとめて検出できるよ
53:デフォルトの名無しさん
13/06/12 12:50:33.87
消えろじゃヴぁ
54:デフォルトの名無しさん
13/06/12 13:16:22.61
仕事のない糞言語から目の敵にされる我らがJAVA様
55:デフォルトの名無しさん
13/06/12 13:52:48.75
ピーターの法則:
組織において有能な人間は昇進しより高い能力を求められ、無能になったところで昇進が止まる
ゆえに組織のいたるところ無能な人間で満たされる
これを人間からソフトウエアに置き換える
たとえばWindows, たとえば C,Java
これらは有用と評価され普及度を高め、クソと評価されるあたりで普及が止まった
これらに対し、社会経験のない中二病、もとい、お子さまは
世の中はクソで満ちあふれている、俺が何とかしなければと情熱を燃やすのである
なお、それが非常にうまく行った場合、結局は上の行程を繰り返すのみ
56:デフォルトの名無しさん
13/06/12 14:52:03.59
Windowsって普及止まったの?CEのこと?
57:デフォルトの名無しさん
13/06/12 20:04:01.93
>>52
C++最高というわけですね
58:デフォルトの名無しさん
13/06/12 20:11:05.29
真のプロフェッショナルはクラス利用者の勝手な継承を許さないようにコーディングする
どうしても継承したい場合はユーザーが自分でラッパーを書いてそれを継承しなければならないように作る
59:デフォルトの名無しさん
13/06/12 23:57:31.36
初心者向けの本で、
> 継承の仕組みを利用した書き方を、『差分プログラミング』とも呼びます
なんて読んだことがあるけど…。
差分で済むから継承、なんてやってたら、is-a関係がとんでもないことになるよね…。
まずは全てのクラスをfinal & イミュータブルにするのが基本。
状態変化を持つクラスだけ、1つずつアクセス範囲を検討するのが良いんだろうな。
60:デフォルトの名無しさん
13/06/13 00:10:46.99
なぜC系言語しかやってこなかった人は意味も無くpublicにするのだろうか
外から見える分得だと思ってるんだろうか
例え将来的にpublicに使うとしても、もしその瞬間には必要ないのなら時がくるまで閉じておけ。社会の窓を。
61:デフォルトの名無しさん
13/06/13 00:18:52.52
>>55
Windows8は止まることなく退化を続けてるよ。
>>52
別に子クラスが仕様を満たしてなかろうと、親クラスが壊れるわけじゃないからいいだろ。親クラスのここを通って、ここのサブルーチンを…とか言ってる奴じゃないかぎり。
62:デフォルトの名無しさん
13/06/13 00:25:46.46
昔ながらの品質保証部とかが
「外部から観測できない手続きは禁止」
とかいってprivateを毛嫌いしてるんじゃね?
63:デフォルトの名無しさん
13/06/13 00:52:11.93
>>48のような考え方で作ろうとしたら必然的にprivateフィールド禁止になるぜ
親クラスは変更しない前提だからカプセル化する必要もない
実際、サブクラスの自由度のためにフィールドは全部protectedにするという
規約はそう珍しくないし
64:デフォルトの名無しさん
13/06/13 05:37:23.14
protectedなフィールドが一番使用頻度が低いなぁ。
publicかprotectedなアクセサがあれば十分だと思うのだけど。フィールドを裸単騎で
子孫クラスに晒す必要性が殆ど無い。
privateでないフィールドはpublic static finalぐらいしか普段は作らない。
65:デフォルトの名無しさん
13/06/13 05:49:06.23
老害はカプセル化の意味も知らないんだろうか
66:デフォルトの名無しさん
13/06/13 06:38:24.62
アクセサさえ通してればカプセル化だと思ってる>>64みたいな奴は非常に多いよね
67:デフォルトの名無しさん
13/06/13 06:56:19.19
必要条件と十分条件の区別も十分につかない>>66みたいな奴も非常に多いよね。
68:デフォルトの名無しさん
13/06/13 07:12:53.36
既存クラスは変更せず、必要な変更はオーバライドによって行うという条件なら
フィールドはとりあえずサブクラスから好きに触れるようにしないと仕方ない
という話に対して、アクセサ使えばいいと言うのは的外れだろう
結局片っ端からアクセサで公開することになり問題の本質は変わらん
69:デフォルトの名無しさん
13/06/13 07:27:31.01
派生でオーバーライドやり放題だと全部パブリックと大差ない
やろうと思えば基底を無視して全部上書きも出来るのだから
それでは基底を引数に受けとるメソッドはどうやってテストすればよいのか
膨大な量になるぞ
派生が作られるたびに今まで作って来た基底を引数に受けとるメソッドを追加でテストしなければならない
70:デフォルトの名無しさん
13/06/13 07:33:48.09
>結局片っ端からアクセサで公開することになり
ならないよ。
子孫クラスに対して実装の詳細を隠すことも知らないのであれば、とりあえず
クラスの設計をする手を止めて既存の有名どころのライブラリやフレームワーク
のJavaDocでも色々読んだ方が良い。
protectedフィールドで内部状態を子孫にガンガン公開している実装なんて
どれほどあることやら。protectedはabstract methodと同様に継承によって機能
拡張できるポイントとして慎重に、かつ詳細なドキュメントと共に定義されて
いるのが殆どだと思うが。
71:デフォルトの名無しさん
13/06/13 07:38:42.12
>>69
基底クラスのメソッドにこのメソッドは○○しなければならないと明記しておいて、
受け取る方のメソッドには引数として受け取ったインスタンスのメソッド××を呼び出すと明記しておく。
テストでは受け取る方のメソッドが××を実際に呼び出してるかどうかテストすりゃOK。
72:デフォルトの名無しさん
13/06/13 10:15:53.42
メソッドのオーバーライドを出来ないようにしろで終わる話なのに
オーバーライド出来るケースの話を延々とするチンパンジー達
73:デフォルトの名無しさん
13/06/13 10:46:11.91
カプセル化と継承による機能変更は両立するものではない
74:デフォルトの名無しさん
13/06/13 13:54:02.01
アグリゲーションとコンポジットの違いがあるからには、private一点張りじゃなくて、protectedが必要なこともある。
75:デフォルトの名無しさん
13/06/13 15:47:20.50
publicがオブジェクトの使用者向けのAPIであるようにprotectedはクラスの
開発者向けのAPIの一部だから。
finalでないpublicフィールドの公開がまずあり得ないようにfinalでない
protectedフィールドの公開もあまり無い。protectedフィールドを再代入
出来る形で子孫クラスに公開したところで、再代入したら何が起こるかは
詳細にドキュメントに書くか、あるいは親クラスのソースを遡って影響範囲
を検討する必要がある。大抵便利でも安全でもないので普通に避ける。
実装の詳細に関する知識を共有した見知った範囲の人間がコードを弄る際の
手抜き程度しか出番は無いと思う。
protected finalも、例えばハンドラ等のオブジェクトを子孫クラスに触ら
せる場合はフィールドよりゲッター使った方が色々便利なのであまり出番が。
使用者には公開しないプリミティブ型や文字列の不変値ぐらいか。
76:デフォルトの名無しさん
13/06/13 16:27:36.93
どうして基地外ほど長文を書きたがるんだろう
77:デフォルトの名無しさん
13/06/13 17:19:55.61
フィールド全部protectedとかprivate禁止とかありえんだろ。
78:デフォルトの名無しさん
13/06/13 19:22:14.27
リスナーとかデザパタ実装するならオーバーライド便利やねん
てかそういうときだけしか使わんけどねん
79:デフォルトの名無しさん
13/06/13 19:24:39.46
>デザパタ実装するなら
この考え方がまさにJAVAドカタ
80:デフォルトの名無しさん
13/06/13 20:27:32.83
privateだと舐めるな!
こっちにはリフレクションがあるんだぞ!
81:デフォルトの名無しさん
13/06/14 04:33:21.59
ドカタはリフレクション使えないから心配ない。
82:デフォルトの名無しさん
13/06/14 05:03:36.73
リフレクションは設計崩壊の産物
ダイナミックキャスト並みに要らない
83:デフォルトの名無しさん
13/06/14 05:34:38.03
ドカタがリフレクション使う必要は無いけれどもドカタでも使えるものを作るには
リフレクションも必要なんだよ。比較的真面目な話として。
フレームワークのAPIとしてはキャストやリフレクションが不要な綺麗な設計に
なっているのに対してフレームワークの実装中ではjava.reflectやCGLIBの類を
ガンガン使っているのは割と普通。
アノテーションとかも定義済みのを使っているうちはリフレクション不要だけど
自前で定義し始めると簡単なリフレクションを使う必要があるよね。
84:デフォルトの名無しさん
13/06/14 06:05:24.94
フレームワーク実装したこともない奴がフレームワーク実装の話をするチンパンジースレ
難読化もできないしな
85:デフォルトの名無しさん
13/06/14 19:34:43.32
Javaの基礎の本と、Eclipseの本でいいのがあったら教えてください
86:デフォルトの名無しさん
13/06/15 00:59:36.75
プラグインありきのeclipseなのに、それ系の本買う奴ってマジで馬鹿だと思う
あんなもん直観的にわかるだろ。まぁ俺も昔1冊買ったことあるけど
87:デフォルトの名無しさん
13/06/15 01:19:43.22
>>85
かっこいいやつ
タイトルは覚えてないが自分がこれから使うバージョンを解説したものを選べ
>>86
じっくり機能を把握したいじゃん♪
3000円越える本は図書館にリクエストを出すという手がある。
88:デフォルトの名無しさん
13/06/15 01:39:47.29
if文の書き方なんですが、
if( !(src.equals(dst))) { ~~
というのと、
if( src.equals(dst) == false ) { ~~
というの、どちらが慣習的に普通なんですか?
不毛な質問でごめんなさい。
89:デフォルトの名無しさん
13/06/15 02:04:17.88
慣習じゃなくてjavaでオブジェクトの比較を行うとき
その2つは判定方法が違うんですけどー(プリミティブ型は除く)
equalsはオブジェクトが同じなら真を返すけど
==は生成されたインスタンスが違えばオブジェクトの中身が同じでも偽になる
90:デフォルトの名無しさん
13/06/15 02:49:28.95
>>88
boolean型なら、どっちでも動作は変わらないんだけどね。
前者が極めて一般的。
あえて後者を使っていた場合「すごく複雑な論理演算の結果、falseなんだぞ!」という強い意図を表してる。
コードの読み手は、そこに何かトリッキーな仕掛けがあるんじゃないかと疑うのよ。
だから、ごく普通のif文では if(xxx == false) とか if(xxx == true) は使わないな。
91:デフォルトの名無しさん
13/06/15 02:52:24.79
!だと見落としのミスが増えそうな印象
(事実、俺はよく見落とす)
92:デフォルトの名無しさん
13/06/15 03:53:50.62
一般的とかそういう感覚じゃねーから
93:デフォルトの名無しさん
13/06/15 05:01:16.96
気持ち悪いならnot_equalsでも作れ
94:デフォルトの名無しさん
13/06/15 07:11:23.97
javaの初心者です。
質問さして下さい。
オブジェクトの比較で
== を使うときって、そのインスタンスのハッシュ値が同等の時だけtrueですか?
また、
eaualsを使うときは、そのインスタンスの中身さえ同じならばtrueですか?
どなたかご教示ください。
95:94
13/06/15 07:12:47.96
あ、88さんも同じ質問してたみたいですね。
すみません。
96:デフォルトの名無しさん
13/06/15 07:19:25.24
質問さしてください。
javaをある程度学んで、NetBeensってやつで
メニューとJTextAreaをペタってはって、JFileChooserでファイルを選んで
File file = filechooser.getSelectedFile()で
Fileのインスタンスを得て、JTextAreaに表示するだけって事をしたいんですが
JTextAreaの変数(ここではtxtareaとします)
txtareaのどのメソッドを選んで、どういう処理をしていけばいいんでしょうか
しょうもない質問ですが、ご教示ください。
97:デフォルトの名無しさん
13/06/15 08:27:38.96
>>94
>>89
98:デフォルトの名無しさん
13/06/15 08:40:34.35
>>96
URLリンク(www.javadrive.jp)
99:デフォルトの名無しさん
13/06/15 08:46:12.36
テキストエリアの一部の文字だけ文字色やフォントを変えることは出来る?
自分で文字位地と長さ調べて別のテキストエリア貼らなきゃダメかな
100:デフォルトの名無しさん
13/06/15 08:49:26.88
質問する奴は名前欄に番号書けよ・・・
同じ奴なのか別人なのかわからん
101:94
13/06/15 10:57:25.36
すいません。
>>89を見たんですが
自分の書いた>>94の考え方でも良いのでしょうか
良ければ、良いと、違うなら、違うと
どなたか、答えてくれませんでしょうかお願いします。
102:桃白白 ◆9Jro6YFwm650
13/06/15 11:49:32.63
>>101
すこし違う。
==はReference Equality Operators。
つまり、参照同じ演算子。
同じオブジェクトを参照してたらtrue。
hashCodeはオブジェクトが異なるときはできるだけ違う整数を返すようにしましょうと
されてるものなんで、==がfalseのとき、hashCodeも違ってくるものなのだけれども、
hashCodeを参照して==の結果が決まってるわけじゃないっすよ。
equalsはequalsの実装しだいなのだけれども、Objectなんかは
参照が違ってたらequalsがfalseを返しちゃう。なので中身が同じならと
一概に言えるわけじゃない。
103:桃白白 ◆9Jro6YFwm650
13/06/15 11:53:32.16
>>102
>==がfalseのとき、hashCodeも違ってくるものなのだけれども、
equalsがfalseのとき、hashCodeも違ってくるものなのだけれども、
104:デフォルトの名無しさん
13/06/15 11:54:20.70
基本情報を取らない弊害がまた出たな
基本情報をちゃんと取っていれば
値、参照、ハッシュ値の違いなどで悩む事はなかったのにね
105:桃白白 ◆9Jro6YFwm650
13/06/15 11:56:49.38
>>104
百済ねえやつ。百済からの回し者か?百済に帰れ。
106:94
13/06/15 13:03:57.66
>>102
なるほど、ありがとうございます。
それよりなにより
俺みたいな中途半端な質問でも
解かりやすく、詳しく説明してくれたことに
感謝感謝です。
107:デフォルトの名無しさん
13/06/15 13:35:30.16
>>99
普通に<font>タグで変えられるよ。
本物のswingプログラマはjavax.swing.text.AttributeSetを使うが、ひたすら面倒
108:デフォルトの名無しさん
13/06/15 13:48:42.31
オブジェクト間の==は同一インスタンスの時だけtrueで、
Object#equals()実装も同様。
それ以外は何でもありで、HashMapとかでトラブル起こしても、
それはequals()やhashCode()のオーバーライド仕様を明記できてない発注者に全責任がある。
109:デフォルトの名無しさん
13/06/15 14:56:37.50
仕様に明記する暇にコードかけると思うんだが上流工程ってそんなに暇なのか?
新人の時にコード内容までキッチリすべて(ただし日本語で)書いてある仕様書みた時は自分の目を疑ったよ
そのうちエクセルコンパイラ作るやつが現れるんじゃないかと古株の先輩にジョークを飛ばしたら苦い顔をされたな
110:デフォルトの名無しさん
13/06/15 15:02:43.34
ドメイン分析できてないと、ほどよく高速に散らばるハッシュ値実装は難しくね?
111:デフォルトの名無しさん
13/06/15 15:40:17.69
なぁ、oracle のjava プログラマのSilverを取ろうと思って
対策本買って、一通り解けたけど
ホームページの例題で初期化ブロック使ったようなコードがあったり
するんだけど、どこまでの知識がいるの?
もうわかんねーよ。
112:デフォルトの名無しさん
13/06/15 15:46:20.15
オブジェクトの論理等価性について事前の分析はきっちり必要だけれどもそれを実際に
equalsやhashCodeとして実装する際は無理に手作りせんでもEclipseでダイアログ開いて
フィールドぽちぽち選択してOKして自動生成させた方が大半のケースで安全確実だと思う。
比較の抜けや一般契約違反も無いし。
113:デフォルトの名無しさん
13/06/15 16:40:52.44
>>111
初歩的な内容しか出ないよ
114:デフォルトの名無しさん
13/06/15 19:25:04.46
Stringの#hashCode()と#equals()で、昔から疑問に思ってることがあるんだけどさ。
equals() の中で1文字ずつチェックする直前、
自身と他者のhashが0でないとき、
つまり両者のhashが確実に計算済みであると保証できるとき、
hashが一致しなければ中身を見るまでもなくfalseを返す。
って実装にすれば、もっと速くなるんじゃね? と思うんだけど。
何か問題でもあるのかね?
115:デフォルトの名無しさん
13/06/15 19:44:50.78
問題はないだろう
116:デフォルトの名無しさん
13/06/15 20:09:25.78
超基礎的な部分だから、移植性を考慮してシンプルな実装にしときたかったんじゃない?
マルチスレッドで気にすることが増えそう
今のJavaの仕様だと特に問題はないだろうけど
117:デフォルトの名無しさん
13/06/15 20:51:06.38
ハッシュ値を計算するコストの問題だと思うよ。
実際ハッシュ値ってイミュータブルなオブジェクトを除いてhasnCode()が呼ばれたら
安直にその都度計算している実装が多い。そしてaとbがイコールであることを調べる
コストとaとbのハッシュをそれぞれ計算するコストは極端には違わない。
仮にaとbのハッシュ値が同じでも改めてイコールであることを確かめる必要があるので
ハッシュ値を使っても二度手間になるというかかえって遅くなりそう。
イミュータブルだったり賢いハッシュ値の更新管理をしているクラスであればその
equals内でハッシュを使うのは当然ありだけど、そういう最適化は各クラスの実装の
中で閉じているべきであって、それらをフィールド値として持つクラスは各クラスが
最適なequalsの実装をしていると信じて素直にequalsを呼ぶのが良いのでは。
118:デフォルトの名無しさん
13/06/15 20:52:47.85
あ、ごめん、Stringの実装の話でしたか。読んでなかった。
確かにそれは変だよね。何でだろう。
119:デフォルトの名無しさん
13/06/15 21:05:48.08
ほんと、バカほど長文がすきだね
120:デフォルトの名無しさん
13/06/15 21:16:06.80
>>114
ハッシュ未計算のフラグにhash == 0使うのやめい。
1.7でもまだ直ってないのか
去年どこかで脆弱性レポート出たよな?
hash=0になるようなクエリばかり送りつけるDDoS攻撃が
121:114
13/06/15 21:16:07.32
>>118
うん、Stringとか、ハッシュ値をキャッシュできる/してるイミュータブルなオブジェクトの話。
// nullチェック、instanceofチェックは事前にやってる。
if (hash != 0 && other.hash != 0) return hash == other.hash;
増えるコストはこのif文。爆速っしょ。
>>115>>116
問題ないはずだよなぁ…。
BigInteger, BigDecimal, Locale, URI, Pattern, UUID, File
Java1.7でイミュータブルっぽいクラスを見てきたんだが、どのequalsもhashのキャッシュなんか使ってなかった。
Fileに至っては、return compareTo(other) == 0; とか。
hashには依存しないのに、compareToには依存するのかよ。
もしかして、なにか盛大に勘違いしてるのか?
122:デフォルトの名無しさん
13/06/15 21:28:33.68
実装としては正しくても意味的に
素直じゃないからだろ
ついでに、文字列が長くて、先頭が同じで、
最後だけ違う文字列の比較でしか役に立たない
ウンコなコードは要らない
>if (hash != 0 && other.hash != 0)
> return hash == other.hash;
しかも間違ってるし
123:デフォルトの名無しさん
13/06/15 21:49:48.32
爆速って試してみたってこと?それとも机上の推論?
Stringがどんな用途で使われることが多いか知らんけど
124:デフォルトの名無しさん
13/06/15 22:09:09.19
机上の空論。しかもコード間違ってたし…
多くの環境では、比較命令の中でも0との比較は高速っていう印象だったんで。
確かに >122 の言う「ウンココード」を追加しなきゃいけない割には、
高速化できるシチュエーションは少ないかもしれない…。
125:デフォルトの名無しさん
13/06/15 22:25:38.88
まあコンセプトとしてはいいんじゃね
ウンココードhere:
URLリンク(ideone.com)
126:デフォルトの名無しさん
13/06/15 22:40:34.97
javaってほんとダメな言語だな
根本にあるコンセプトは悪くないんだが
127:デフォルトの名無しさん
13/06/15 22:41:36.41
なんだいきなり
そう思った根拠ぐらいは書いた方がいいぞ
128:デフォルトの名無しさん
13/06/15 22:43:38.66
>>127
スレの流れ読めばわかるが?
129:デフォルトの名無しさん
13/06/15 22:44:29.02
覚えたばかりの言葉は使ってみたくなるのが人の道理
俺もそのコンセプトはよく分かるわー
130:デフォルトの名無しさん
13/06/15 22:55:41.21
おれもコンセプトには世話になったよ
131:デフォルトの名無しさん
13/06/15 23:04:13.40
>>125
わざわざ書いてくれたのか。
26万文字×1000回とか、まさに俺の思い描いていた理想のシチュエーションだわ(^q^)
>>126
ルートにあるコンセプトはブラウザプラグインとしてのエンバイロンメントフリーなリッチクライアントだから。
132:デフォルトの名無しさん
13/06/15 23:17:18.83
>理想のシチュエーションだわ(^q^)
>エンバイロンメントフリー
もうやめて…
133:デフォルトの名無しさん
13/06/16 00:39:10.04
ハッシュ比較のコードが入ってない場合の全比較はどれくらいなのよ
134:デフォルトの名無しさん
13/06/16 08:04:43.56
ジェネリック使いにくい
135:デフォルトの名無しさん
13/06/16 08:08:56.91
使いにくいなら使わなければいいじゃない
136:デフォルトの名無しさん
13/06/16 08:24:12.14
インターフェイスにhashCodeメソッドなどを書いていないのに
そのインターフェイスを通じてhashCodeなどを呼び出せるのは何故なのでしょうか?
クラスがObjectを暗黙に継承していることは理解しています
しかしインターフェイスの親はインターフェイスでなければならないので
インターフェイスがObjectを継承するのはおかしな話です
なのにインターフェイスを通じてhashCodeを呼び出せてしまう……
わけがわかりません
混乱してあたまがおかしくなりそうです
137:デフォルトの名無しさん
13/06/16 08:36:29.20
細かいことをすっ飛ばして説明すればInterfaceのメンバはObjectのパブリック
メソッドを含むと言語仕様で定義されているから。
138:88
13/06/16 08:51:21.21
booleanが戻り値の場合を想定していましたが、どちらにしろ前者が普通なんですね。
ありがとう御座いました。
大昔にExcelVBAしかやった事が無かったので、質問させて貰いました。
139:デフォルトの名無しさん
13/06/16 11:36:08.63
89の説明は壊滅的に間違ってるが、結論は正しい。
90がいいな。どちらにせよ前者が普通。
140:デフォルトの名無しさん
13/06/16 11:53:19.92
ドカタには否定の論理は難しいから
== false
と書かせるのが吉
141:デフォルトの名無しさん
13/06/16 11:58:15.36
ドカタには論理型は難しいから
==false)==true
しかし、==trueの結果もまた論理型なので
==false)==true)==true
以下再帰的に続く
142:デフォルトの名無しさん
13/06/16 12:02:27.03
これが後に言う越後屋事変である
143:デフォルトの名無しさん
13/06/16 12:12:29.30
ところでおまいらelse句って知ってるのか?
144:デフォルトの名無しさん
13/06/16 13:20:59.55
よし、if文使うのやめよう(関数型言語過激派)
145:デフォルトの名無しさん
13/06/16 13:28:56.33
関数型は素晴らしい
設計書を書くのもテストするのも楽だ
日本のIT業界ではコードの日本語訳である設計書の作成とテストが実務の八割を費やしている
ここを短縮できれば大幅に仕事効率が改善される
146:デフォルトの名無しさん
13/06/16 13:53:06.19
仕事効率もクソもその無駄な作業をして時間給を貰う仕事なのだから
効率なんて上げなくていいよ
147:デフォルトの名無しさん
13/06/16 14:19:35.64
それもそうだな
効率が悪くて困るのは経営陣だけだし
傾いて来たら転職すりゃいいし
148:デフォルトの名無しさん
13/06/16 14:42:11.88
何より素晴らしいのは
関数型ではこれはできませんやりませんで済ませられる点だ
149:デフォルトの名無しさん
13/06/16 16:56:43.58
質問です。
URLリンク(d.hatena.ne.jp) に "Apple Java Extensions" なるものについて書いてありますが、
これはどこで手に入るのでしょうか。
お願いします。
150:デフォルトの名無しさん
13/06/16 17:10:43.15
いくら出せる?
151:デフォルトの名無しさん
13/06/16 17:36:54.11
50円
152:デフォルトの名無しさん
13/06/16 17:38:46.73
うまい棒五本じゃ晩飯にもならないよ
153:デフォルトの名無しさん
13/06/16 17:46:11.70
5円チョコ10個買えるやんけ
154:149
13/06/16 18:16:14.28
>>150-153
有料なんですか?
"Apple Java Extensions" なるものがどういうものかよくわかってないのですが。
155:デフォルトの名無しさん
13/06/16 22:13:07.50
>>149
stackoverflow.com/questions/15048220/
> They are included both in the Oracle distribution and in OpenJDK.
だとさ。Mac使ってないから知らんけど。
156:デフォルトの名無しさん
13/06/16 23:07:29.34
>>136-137
気にしたこと無かったのでこの機会に自分でも調べてみた。
docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.2
> (前略)the interface implicitly declares a public abstract member method(中略) corresponding to each public instance method(中略) declared in Object(後略)
コンパイラがゴニョってんのか。
そういやJava8でinterfaceにデフォルト実装持てるようになるけど、hashCodeなんかは別扱い(デフォルト実装持てない)だな。
157:デフォルトの名無しさん
13/06/16 23:34:42.37
質問です
ByteBuffer#get(byte[] dst)でdstへデータを読み込む際にバッファー内のデータがdst.lengthより小さいと例外が発生します
これは仕様のようなのですが、なぜ配列のサイズより小さいデータを入れるだけで例外とするのでしょうか。
これでは次に大きなデータを受けるときにわざわざbyte[]を作り直す手間が勿体無く感じるのですが
158:デフォルトの名無しさん
13/06/16 23:46:49.70
>>157です
自己解決しました。スレ汚し失礼しました
159:149
13/06/17 00:03:31.64
>>155
なるほど。ありがとうございます。
しかしドキュメントが無さすぎて使い方がさっぱりわからない。
(>>149で挙げたブログ中のリンクもリンク切れ)
どなたか OS X のメニューのハンドリングについて情報持ってる方いませんか?
160:デフォルトの名無しさん
13/06/17 15:57:21.83
>>141
いるんだよなこういうバカが
式の型がbooleanかどうかは関係なく
ドカタが認知しやすい形かどうかが重要
if (!fuckReturnBoool()) ドカタ理解困難
if (fuckReturnBool()==false) ドカタ理解容易
if ((fuckReturnBool()==false)==true) ドカタ理解不能
161:デフォルトの名無しさん
13/06/17 16:52:42.40
>>160
>> if ((fuckReturnBool()==false)==true) ドカタ理解不能
こんなコードを書くアホウはいないだろ(笑)
162:デフォルトの名無しさん
13/06/17 16:59:24.21
>>160
>> if ((fuckReturnBool()==false)==true) ドカタ理解不能
書き方がトーシロー ってわかってるのか? >>160のアホ
ま、書いてる 意味がわからんだろうけどな(笑っちゃお)
163:デフォルトの名無しさん
13/06/17 17:07:21.24
読みやすい、わかりやすいコードを書けるのがいいコーダーだと思うんだけど違うのか?
164:デフォルトの名無しさん
13/06/17 17:13:05.77
そこまで親切なコード心がけるんだったら
isで始まるboolean型ローカル変数で評価してやれよ。
165:デフォルトの名無しさん
13/06/17 17:15:13.81
質問失礼します。
SwingのJFrameの手前に描画されているものから順に処理していきたいです。
JFrameのZ値はどのようにして取得したら良いでしょうか?
分かる方、よろしくお願いします。
166:デフォルトの名無しさん
13/06/17 17:28:44.05
つ java.awt.Container#getComponentZOrder()
手前から描くと、最奥のJFrame描くときに全部消されちゃうぞ?
167:165
13/06/17 17:36:34.38
>>166
すいません。
質問の書き方が間違っていました。
JFrame内のコンポーネントのZ値ではなく、JFrameそのもののZ値です。
JFrame(ウィンドウ)がデスクトップ上にいくつも表示されています。
手前に表示されているJFrameから順番に処理していきたいという意味です。
よろしくお願いします。
168:デフォルトの名無しさん
13/06/17 18:22:14.44
>>if ((fuckReturnBool()==false)==true)
これ見てなんとも思わないようなのはシロートレベルだと思うが?
今のプログラマはその程度なのか?
169:デフォルトの名無しさん
13/06/17 20:16:45.14
そのレベルは>>141だけ
170:デフォルトの名無しさん
13/06/17 20:53:21.07
16bit グレースケール tif を読めるライブラリってあります?
JAIでは読めませんでした。
171:デフォルトの名無しさん
13/06/17 21:09:26.48
URLリンク(blog.goo.ne.jp)
172:デフォルトの名無しさん
13/06/17 22:02:34.04
clsやclearのように標準出力に出力した文字をクリアする方法を教えて下さい
windowsXP,7依存でもいいのでお願いします
173:デフォルトの名無しさん
13/06/17 23:50:54.23
標準出力に出力した文字はクリアできません
不可能です
ターミナル画面をクリアしたいという話なら
↓ が回答
174:デフォルトの名無しさん
13/06/18 00:08:00.77
JNIでコンソール制御Win32 API
175:デフォルトの名無しさん
13/06/18 00:19:45.43
はい次
176:デフォルトの名無しさん
13/06/18 00:55:27.66
DOS窓の話ならまずANSI.SYSでググれ
177:デフォルトの名無しさん
13/06/18 05:36:10.18
SWINGでクリックイベントやマウスイベントをスルーさせて、
後ろのウィンドウに処理させる事は可能でしょうか?
178:デフォルトの名無しさん
13/06/18 10:35:28.50
当然プロセスをまたぎます(キリッ
とか言い出す予感
179:177
13/06/18 13:51:09.42
>>178
いえ、プロセスはまたぎません。
180:デフォルトの名無しさん
13/06/18 16:08:45.43
javax.swing.SwingUtilities#convertMouseEvent()
でイベント変換できないかな。
スクリーン座標との変換はconvertPointFromScreen、convertPointToScreenあたりで
場合によってはgetDeepestComponentAtも必要?
SwingプログラマならSwingスレにいそうだが
181:デフォルトの名無しさん
13/06/18 16:40:55.56
てst
182:177
13/06/18 18:54:43.16
>>180
ありがとうございます。
とりあえず全てのウィンドウを配列にして管理して、上から順に処理するようにしました。
ウィンドウの矩形にヒットしているかチェックして、ヒットしていたらdispatchEventでイベントを流し込みます。
技術的なノウハウが無いのでめんどくさい処理になってしまいました。。。
183:デフォルトの名無しさん
13/06/18 23:10:50.80
System.in.readの戻り値がcharではなくint型なのは何故でしょうか
184:デフォルトの名無しさん
13/06/18 23:14:16.70
APIリファレンスも読めない人に
理解することは難しい
185:デフォルトの名無しさん
13/06/18 23:37:51.80
InputStreamのread()の戻り値もintなのが不思議
byte型だったらだめだったのかな?
186:デフォルトの名無しさん
13/06/18 23:44:46.09
APIリファレンスも読めない>>183と>>185に
理解することは難しい
187:デフォルトの名無しさん
13/06/18 23:56:08.83
Cの腐った設計を真似したから
としか言いようがない。
出来の悪い設計に論理性を求めてはいけない。
188:デフォルトの名無しさん
13/06/19 00:22:41.18
javaに論理性とか合理性を求めたら負け
189:デフォルトの名無しさん
13/06/19 00:34:44.40
C上がりはdocも読まないのか!?
190:デフォルトの名無しさん
13/06/19 00:42:44.79
>>185
読み終わったら-1を返す仕様だから
byteだと符号付きなので値が変わってしまい扱いにくいから
パフォーマンス的な損も特にないから
191:デフォルトの名無しさん
13/06/19 01:36:14.82
>byteだと符号付きなので値が変わってしまい
は?
192:デフォルトの名無しさん
13/06/19 01:48:43.55
InputStream#readはByteを返すべきだった
193:デフォルトの名無しさん
13/06/19 06:21:25.44
例外なげるのが正解
194:デフォルトの名無しさん
13/06/19 06:44:53.12
Java SE 7update25キター
195:デフォルトの名無しさん
13/06/19 06:48:45.70
byteがsignedで誰が得するの?
あれこそまさに愚かな一貫性というやつだよね
196:デフォルトの名無しさん
13/06/19 06:52:50.34
>>195
MIDIファイルの読み書きする人
役に立つのはたぶん世の中でそれくらいだろう
197:デフォルトの名無しさん
13/06/19 06:56:29.98
>>191
結果の型がbyteだと、結果をそのまま0xffと比較できないんだぜw
198:デフォルトの名無しさん
13/06/19 06:59:19.06
>>197
で、「値が変わる」とは何のこと?
199:デフォルトの名無しさん
13/06/19 07:24:35.68
読み終わったら0を返すでいけるとおもう
200:デフォルトの名無しさん
13/06/19 07:49:56.10
>>199
戻り値が長さの場合の話じゃないよ
201:デフォルトの名無しさん
13/06/19 08:49:30.95
>>193
try {
buf.write(in.read());
} catch (Exception e) {}
202:デフォルトの名無しさん
13/06/19 11:10:07.96
つまりJavaはbyte型の値「-1」を読みとったときに
int型の255に変換して返す統一性のない
ライブラリ仕様であるとふむふむ
203:デフォルトの名無しさん
13/06/19 12:39:42.94
よそ様のライブラリでは
・0x00を読み込んだとき
・0xffを読み込んだとき
・入力の末端に到達したとき
・末端じゃ無いけどブロックせずに読めそうなデータだけ返すとき
をどう区別してるのか、産業でまとめてくれ。
204:デフォルトの名無しさん
13/06/19 13:02:54.42
>0x00
JAVA言語上の概念であるint型(4バイト整数)の値を
読み込んだときの挙動とな?
205:デフォルトの名無しさん
13/06/19 13:10:32.64
JAVAドカタには
受信データそのものと受信処理のステータスが
別であるという当たり前の発想は無いらしい
206:デフォルトの名無しさん
13/06/19 13:40:49.52
C言語のfgetcとかと同じにしただけなんじゃね?
fgetcよりはエラー時に例外出るだけマシな感じ。
207:デフォルトの名無しさん
13/06/19 14:21:42.17
>エラー時に例外出るだけマシ
まるでfgetcはエラー情報が取れないみたいな言い方だな
208:デフォルトの名無しさん
13/06/19 15:56:23.88
ちがうだろw
209:デフォルトの名無しさん
13/06/19 16:31:18.82
むしろこの際、java.text.CharacterIterator.DONE も廃止して、
int型の-1にするべきだとおもうんだが
210:デフォルトの名無しさん
13/06/19 17:25:03.20
そういう仕様がJavaの利点だと気づいてない人が沢山いますねぇ。
だからJavaが速いことに気づかない
211:デフォルトの名無しさん
13/06/19 18:48:06.52
JAVAドカタの>>209には
受信データそのものと受信処理のステータスが
別であるという当たり前の発想は無いらしい
212:デフォルトの名無しさん
13/06/19 19:15:35.37
符号理論上では対等な事象をわざわざ分ける男の人って…
213:デフォルトの名無しさん
13/06/19 21:05:36.28
どうでもいい
しゃぶれよ
214:デフォルトの名無しさん
13/06/19 21:36:48.67
すみません、質問する場所がわからないのでここで質問します。
Javaが使えるレンタルサーバを借りるとして、サーバ代を打ち消す程度の収益を、
個人の趣味の範囲で望むのはどのくらい大変ですか?
また、比較的安いサーバではweb.xmlを弄らせてくれないようですが、こういうのは避けたほうがいいですか?
それとも<servlet>タグ等はかけるのでしょうか?
215:デフォルトの名無しさん
13/06/19 21:41:34.51
マイJenkins立ち上げるのなら、サーバにメモリ1GBは欲しい
216:デフォルトの名無しさん
13/06/19 22:52:30.18
>>214
VPSを借りろ。月1000円未満で借りられる。
VPSを管理するスキルが無いのなら板違いだ。
217:デフォルトの名無しさん
13/06/19 22:54:00.34
JAVAドカタの>>212には
受信データそのものと受信処理のステータスの
区別がつかないらしい。
int値をシリアライズして伝送するライブラリを
書かせると糞なメソッド仕様になるんだろうな。
218:デフォルトの名無しさん
13/06/19 23:01:07.24
二言目にはドカタの無職さんこんばんは。
219:デフォルトの名無しさん
13/06/19 23:03:02.09
>>214
>サーバ代を打ち消す程度の収益を
どうみてもスレ違いです
220:デフォルトの名無しさん
13/06/20 00:32:27.45
Windowsで動くならそのままAndroidでも動くんですか?
221:デフォルトの名無しさん
13/06/20 00:35:57.39
>>220
GUIとファイルI/OとDBと通信を
使用してなくてjava.langの中だけなら
たぶんいける
222:デフォルトの名無しさん
13/06/20 06:24:54.09
ライトワンスランエニウェアだから動くよ
動かないなら詐欺みたいなもんだ
223:デフォルトの名無しさん
13/06/20 06:36:45.82
動かないよ
AndroidはJavaではないし
そもそもまっとうなJavaの中でも組み込み用のとかあるし
224:デフォルトの名無しさん
13/06/20 06:38:43.97
動かないよ
AndroidはJavaではなく海賊版だし、
そもそも公式Javaの中でも組み込み用とかあるし
225:デフォルトの名無しさん
13/06/20 07:13:15.40
なんだ詐欺だったのか?
一度書けばどこでも動きますよ!ぜひ導入してください!
なーんて謳い文句で営業してるのに、ほんの些細な変化でも動かなくなる
誇大広告もいいとこだな
226:デフォルトの名無しさん
13/06/20 07:30:50.85
ドカタの使い回しが利くという意味だよ
227:デフォルトの名無しさん
13/06/20 15:03:11.60
JavaSEのSとは何か?
>>225
それは昔の話
Javaというブランドをカネで貸して商売をするようになる前の
228:デフォルトの名無しさん
13/06/20 18:29:08.10
>>225
詐欺と言えばそうかも知れない。
Javaは言語仕様と実行環境のセットからなる
基盤なのに、Googleは前者だけをパクって
紛らわしいものを出した。Googleは詐欺
229:デフォルトの名無しさん
13/06/20 18:38:13.22
BufferedReaderの仕様について教えてほしいのですが、readLine()を使用して10行を
読み込んだとして、close()しなければ10行は残ったままになるのでしょうか?
で次データが来た場合、11行目から(1行目~10行目は残したまま)書くのでしょうか?
230:デフォルトの名無しさん
13/06/20 18:42:22.79
ちょい質問させて下さい
WindowsでJava以外のWindow上の色を定期的に判別して、黒が白になったら別の場所をクリックする
みたいな事をする場合
やっぱりクリップボードを介する&Robotがいいでしょうか?
231:デフォルトの名無しさん
13/06/20 18:54:58.20
>>229
「10行は残ったまま」の意味が分からないけど、10行readLineしてしばらく待って次にreadLineしたら11行目が読み込まれる。
「11行目から(1行目~10行目は残したまま)書く」って、BufferedReaderでは書き込めないよ。
BufferedReaderとは別にFileWriterとかで書き込みたいなら、BufferedReaderで何行読み込んだとか関係ないし。
File I/Oの基本が分かってないんじゃない?
232:229
13/06/20 19:08:50.34
>>231
ありがとうございます。
アプリ間を跨いで同じファイルを使用していて。こっちは読み込みのみで、
別アプリから書き込みが発生します。
233:デフォルトの名無しさん
13/06/20 19:10:53.80
そういうのはファイルではやらないでください
みんな迷惑してるんですよ
234:デフォルトの名無しさん
13/06/20 20:01:28.27
つ 「名前付きパイプ」
235:デフォルトの名無しさん
13/06/20 20:11:48.04
つ「データベース」
236:デフォルトの名無しさん
13/06/20 20:47:22.50
チャットみたいなのをしたいんだろ >>232
そういう感じのことしたいんなら
RandomAccessFileかFileChannelを覚えることをおすすめします
237:デフォルトの名無しさん
13/06/20 23:41:21.10
JAXBでテストデータを出力したいのですが、
XMLのルートに当たるTestDataクラスが出力したいUserクラスを持つ構造で
Userのプロパティを属性にマッピングするにはどうしたら良いでしょうか。
ただしUserクラスそのものには@XmlAttributeを注釈しないようにしたいです。
238:デフォルトの名無しさん
13/06/21 00:03:40.19
>>237
UserクラスにJAXBアノテーションを付けたくないという解釈で良いのかな?
239:デフォルトの名無しさん
13/06/21 00:34:17.46
>>238
はい、おっしゃるとおりです
240:デフォルトの名無しさん
13/06/21 02:43:53.97
>>216
専用サーバを借りる予定です
鯖のコスト減らして貧乏臭く開発するような内容は今まで散々やってきたので、
今度は大きいサービスを作ってみたいと思いました
レンタルサーバで実際にpollingがwebsocketを使ったアプリを試したいです
241:デフォルトの名無しさん
13/06/21 05:34:23.24
>>237
あんまりかっちょええ方法は思いつかないねぇ。
<testData usersProp1="..." usersProp2="..." ...>
みたいにUserクラスのプロパティを親、この場合はTestDataに対応するXML要素の
属性にしたいのであれば、user自体は@XmlTransientにして、代わりにuserの属性
を読み書きするセッターゲッターをTestDataクラスに追加して@XmlAttributeを
つける。
<testData ...>
<user prop1="..." prop2="..." />
みたいにtestDataの下にuser要素を配置してuserのプロパティをこの要素の属性に
したい場合はプロキシクラスUserProxyを作って必要な@XmlAttribute等をつける。
UserとUserProxyの相互変換をするためのXmlAdapterを実装する。
最後にTestDataのプロパティuserに@XmlJavaTypeAdapterをつけてUserとUserProxy
の間の変換に使うXmlAdapterを教えてあげる。
242:デフォルトの名無しさん
13/06/24 00:02:45.60
JDK 6 Update 11のインストールexeを実行すると、
「有効なwin32アプリケーションではありません」てメッセージが出るんだけど
どうすればインストールできる?
OSはWindows7 Pro SP1 64bit
BTOでセットアップされたPCが今日届いたばかりだから古いJDKは残ってない。
243:デフォルトの名無しさん
13/06/24 02:33:42.17
>>242
ダウンロード時に回線障害起こしたとかでJDKが破損してるんだろう
再ダウンロードして実行し直せばいい
244:デフォルトの名無しさん
13/06/24 02:56:11.85
>>243
ほんとだ。。。
ファイルサイズ見たら全然想定より少なかった。
ありがとう!
245:デフォルトの名無しさん
13/06/24 03:05:02.27
板違いな気がするけどJavaの使用に関する質問もここでいいの?
違ってたら誘導して頂けると有り難いです
246:デフォルトの名無しさん
13/06/24 03:10:04.34
>>245
プログラミングとは関係のない話題は↓が適切
Java Runtime Environment Part3
スレリンク(software板)
247:デフォルトの名無しさん
13/06/24 03:38:45.47
>>246
ありがとうございます
248:デフォルトの名無しさん
13/06/24 06:46:02.07
private List<String> strList = new ArrayList<String>();
public void addString(String str) {
strList.add(str);
}
public String getString(int num) {
if(strList.size() < num+1) return null;
return strList.get(num);
}
のような、StringのListを管理するがそのList自体は返さないようなManagerクラスがある場合、
getString(int num)メソッドの一行目に書いたようにnullを返してもいいのかな?
でもこれって上で書いたようにNullPointerExceptionでエラー出すか、この一行は書かずにArrayIndexOutOfBoundsException出すかの違いでしかないのか・・・。
こういう時に何を基準に判断していくべきなのかがもう一つわからないです。
加えて、このnullチェックはメソッドを呼ぶ側ですべきなのかこのクラスでするべきなのかの判断基準もわかり辛いです。
JavaのSDKみるに、基本放置でエラー吐かせて、必要ならば呼ぶ側でする感じかなとは思いますが。
249:248
13/06/24 06:49:19.61
あぁ、String型でやったのは大きなミスだ。
これじゃヌルポはでないか。
250:デフォルトの名無しさん
13/06/24 06:49:33.15
>こういう時に何を基準に判断していくべき
このプログラムについてのお前の設計思想
>JavaのSDKみるに、基本放置でエラー吐かせて
んなこたーない
251:デフォルトの名無しさん
13/06/24 06:57:53.65
>>250
だから設計思想を形作る判断材料のどこに重点をおくべきなのかがわからないの。
お前の設計思想なんていいだしたらメモリさえ食わなきゃ何でもokみたいな言語に成り下がるわけで。
null checkもお前の設計思想では片付かない相当大きな論争がありますよね?
252:250
13/06/24 07:27:37.24
>お前の設計思想なんていいだしたらメモリさえ食わなきゃ何でもok
そうだよ。
プログラミングが目的じゃなくてコンピューターに
やらせたいことがあるんだからプログラミング言語がある。
生産性・保守性・拡張性・再利用性の様々な観点で
今回の自分の目的に叶っていれば問題なし。
プログラミング自体が目的のアホな論争など
どうでもいい
253:デフォルトの名無しさん
13/06/24 08:13:55.37
>>252
結局何も言ってないのと同じこと
254:デフォルトの名無しさん
13/06/24 08:24:23.76
いや、俺は>>250に一票。
結局のところ、プログラム全体としてのエラーや例外のポリシーを決めないとどうすべきか
なんて言えないよ。
255:デフォルトの名無しさん
13/06/24 08:43:53.04
>>254
じゃあ黙ってろよ
256:デフォルトの名無しさん
13/06/24 08:45:57.24
お前らわからないくせに偉そうにぐだぐだ言いやがるよな
257:デフォルトの名無しさん
13/06/24 10:23:06.32
わかるわからないの問題かこれ?
258:デフォルトの名無しさん
13/06/24 10:57:22.99
>>257
わからないくせに偉そうにぐだぐだ言うなって言ってんだよ。
>>252なんだよこれ。バカが。
259:デフォルトの名無しさん
13/06/24 11:21:32.05
>>258
よくわかんないからもう少し丁寧に説明してくれよ
260:デフォルトの名無しさん
13/06/24 11:22:38.82
粘着しだした
261:デフォルトの名無しさん
13/06/24 11:25:21.21
>>248
「自分的にこうあるのがベター」って考えがとくに無いなら、
とりあえずJavaの標準ライブラリに合わせりゃいいじゃん。
小難しいこと考えずに、
public String getString(int num) { return strList.get(num); }
だけで、標準ライブラリの設計と合致するっしょ。
設計思想無しにヘタに、
if (0 <= num && num < strList.size()) return null;
とか書いて例外な状況を握りつぶすのは最悪。
本当はnumの範囲外が原因なのに、
戻り値を最初に使った場所でヌルポが出るとか、原因見つけるの大変だろ。
262:デフォルトの名無しさん
13/06/24 12:05:53.67
>>248
例えばOracleが公式で出してるJNIについての設計文書を読んでみるとわかる。
URLリンク(docs.oracle.com)
> JNI は、null ポインタまたは不正な引数型の受け渡しのようなプログラミングエラーについてチェックを行いません。
> JNI は、次のような理由からこれらの プログラミングエラーについてのチェックを行いません。
> ・JNI 関数に起こり得るすべてのエラー条件についてチェックするよう強制すると、
> 通常の (正常な) ネイティブメソッドのパフォーマンスが低下する
> ・多くの場合、このようなチェックを実行できるほど十分な実行時の情報がない
-1やnullなどのエラーコードを返か、例外を投げるかについても言及されてる
> JNI 配列アクセス関数の一部には、エラーコードを返さないが、
> ArrayIndexOutOfBoundsException または ArrayStoreException をスローするものがある
この文章からわかるのは、
ライブラリがエラーチェックをどこまで行うのかは「ライブラリの目的によって変わる」ということ。
JNIは引用文に書かれている理由でエラーチェックを行っていないが、
もちろんこれがあらゆるライブラリに当てはまるわけではない。
263:デフォルトの名無しさん
13/06/24 12:17:59.16
>>261
getStringでnullが返ってくることが例外なのか意図された状況なのかも>>248のコード片だけじゃわからないからね
例えば配列は用意した分にしかアクセスできないけど、
用意しなかった分には任意の初期値を用意した無限のインデックスでアクセスできる配列クラスを作りたいとか
そういう場合に初期値としてnullを用意したという状況ならば、getStringでnullが返ってくることは例外ではなく正当な結果だし
>>248がそういうライブラリなのか、そうじゃないライブラリなのか絞り込むための材料は用意されていない
よって回答者のレスが抽象的・一般的になってしまうのは、そもそも用意されてるコード片が抽象的すぎて何も言えないからなんだよ
264:デフォルトの名無しさん
13/06/24 12:30:33.95
> JNI は、null ポインタまたは不正な引数型の受け渡しのようなプログラミングエラーについてチェックを行いません。
これは意味が違うだろ。
JNIというフレームワークとしては自動チェック機能を提供しないだけで、
JNIのCプログラムがnullチェックしなかったら確実に死ぬ
265:デフォルトの名無しさん
13/06/24 12:49:58.68
>>248のダメな点
・return nullだと、strListの中に入っている正当な値としてのnullが返って来たのか、
numがインデックスの範囲外であることを示すためにnullが返って来たのか区別することができない
・addStringにおいてnullチェックが行われていないため、
Listの値としてnullを受け入れるのが正当な仕様であるように見える(これでいいのか?)
↓
これらを総合すると、任意のインデックスを受け取って値を返し
初期化されてないインデックスが指定されたら初期値としてのnullを返すようなListを作ってるようにしか見えないが
これでいいのか?
266:デフォルトの名無しさん
13/06/24 13:14:57.75
>>263
>>248のコードをよくよく読み直したら、だんだん解らなくなってきた…
>>265に加えて、
・strListは参照が可変でいいの?
・負の引数はエラー、正はOK、ただしInteger.MAX_VALUEはエラー
たぶん、
「初心者は難しいこと考えずに、まずは教科書よく読んで、
しっかりコード書いて1歩ずつ理解していくと良いよ」
ってのが>>248にとって一番しっくりくる回答だと思う。
267:デフォルトの名無しさん
13/06/24 13:53:06.36
>>266は無視しておk
こいつ、レスつけてる連中の中で一番腕が悪い、もしくは馬鹿。
論点を無視した指摘に、意味のないアドバイス。
なんでこんな奴がドヤ顔でレスしてんの?
268:デフォルトの名無しさん
13/06/24 15:42:05.39
人を馬鹿呼ばわりすると中傷と言われますよ。
こういうときは
× >>267は馬鹿
○ >>267のレスは馬鹿な内容だ
と言うものです。
269:デフォルトの名無しさん
13/06/24 16:40:23.09
twitter botを作成しようとしてます URLリンク(gomyownway.hatenablog.com)
このページを参照して一応必要なキーなどな入れているのですが
Exception in thread "main" java.lang.NoClassDefFoundError: test/TweetTest のエラーがでて実行できませんどうすればいいですか?
270:デフォルトの名無しさん
13/06/24 16:52:52.97
>>269
ソースコードではなく実行環境の問題
どういう環境で実行してるのか書け
271:デフォルトの名無しさん
13/06/24 16:59:28.46
>>270
実行環境はmacでeclipseです
272:デフォルトの名無しさん
13/06/24 17:02:27.39
>>269
まず画面にtestと表示するだけのプログラムを
完成させて出直せ
273:デフォルトの名無しさん
13/06/24 17:04:18.55
>>272
それはもうやりました
274:デフォルトの名無しさん
13/06/24 17:09:41.01
>>273
プロジェクトの設定をどこかおかしくしたのが原因
だから空のプロジェクト作り直して順番に確認していけ
275:デフォルトの名無しさん
13/06/24 17:32:01.23
>>274
ありがとうございます
言われた通りに最初からやったらうまくいきました
276:248
13/06/24 22:02:44.02
return null;
の部分を
throw new NullPointerException();
にするなんていうのはなし?
277:デフォルトの名無しさん
13/06/24 22:33:14.84
上の回答見てまだそんなこと言うか
278:デフォルトの名無しさん
13/06/25 07:58:37.22
ヌルポを自分でスローするとか
どんだけお前はアホなんだよ
呼び出し側のパラメーター異常は
IllegalArgumentExceptionだろ
279:デフォルトの名無しさん
13/06/25 08:00:21.97
途中で送信したoops!
ノーチェックかチェックしてIllegalArgumentException
スローするかどちらかにしろ
280:デフォルトの名無しさん
13/06/25 10:09:07.50
そうか
なぜかreturn null前提で考えてた
281:デフォルトの名無しさん
13/06/25 14:58:19.28
質問:変数paramがユーザー指定の文字列の場合、これってコードインジェクションされる可能性あります?
String base = "ping ";
int ret = Runtime.getRuntime().exec(base + param).waitFor();
ぱっと見た目やばそうなんだけど・・・
282:デフォルトの名無しさん
13/06/25 15:15:08.63
うん。
283:デフォルトの名無しさん
13/06/25 15:22:35.69
ですよねぇ・・・
実際セミコロンつけてコマンド連ねてみても動かないから、証明出来なくて困ってる
なにまちがえてんだろ
284:デフォルトの名無しさん
13/06/25 15:27:35.39
コマンドインジェクションはむずいんじゃないのかな。
JavaのRuntime.execはシェルを呼ばない。単純に文字列をトークンに分割して
最初のトークンで指定されたコマンドに以降のトークンを引数としてわたすだけ。
なので;や|、&といったシェルが解釈する文字列は機能しないと思う。
285:デフォルトの名無しさん
13/06/25 15:36:04.27
最近Java更新しようとするとウィルス対策ソフト入れようとするんだけど
286:デフォルトの名無しさん
13/06/25 16:29:27.50
>>284
なるほど、サンクスです。適当に付け足してもうごかないわけだ
しかし、チェック処理がないのがきもちわるい
作った本人が分かってたのか、分かってなかったのか、わからんな・・・
287:デフォルトの名無しさん
13/06/25 16:50:16.66
RuntimeやめてProcessBuilder使えって通達、最近来てなかったっけ?
288:デフォルトの名無しさん
13/06/25 17:04:47.01
既存のソースにコレがあったので、直した方がよくね?って話に持っていこうかと。
このためだけに触りたがらないヤツがいるので、危険度を証明したかったんだが
証明できんw
という夢を見た
289:デフォルトの名無しさん
13/06/25 23:00:45.63
abstractクラスをうまく使えるようになるとかなりソース綺麗になりますねぇ
Javaは設計が上手くいったときがスカっとして個人的に一番楽しい
290:デフォルトの名無しさん
13/06/25 23:05:01.54
スカはちょっと・・・
291:デフォルトの名無しさん
13/06/26 01:57:41.23
abstractとか失敗設計の典型例だろ
292:デフォルトの名無しさん
13/06/26 03:55:18.95
?
293:デフォルトの名無しさん
13/06/26 04:02:32.31
>>291
これはひどい
294:デフォルトの名無しさん
13/06/26 05:40:01.92
そもそもオーバーライドはバグの温床なのに必ずオーバーライドしなきゃダメな時点でアウト
295:デフォルトの名無しさん
13/06/26 06:53:39.61
オーバーライド以上にコードのコピペがバグの温床。
いつの日か出会うかもしれない変な継承によるバグにおびえるヒマがあったら
今目の前にあるコードから継承や抽象クラスやコンポジションを使ってコードの
反復を一つでも減らした方がまだ生産的。
296:デフォルトの名無しさん
13/06/26 07:13:47.54
>>295
オーバーライドではない→コピペ
まずこの発想がキチガイ的でヤバイ
297:デフォルトの名無しさん
13/06/26 07:24:24.63
オーバーライドはスーパークラスの呼び出しをJavaDocで指示するケースが一番ヤバイな
protectedなメソッドを空実装しといてオプショナルにしとくのなら安全で使いやすいが
298:デフォルトの名無しさん
13/06/26 07:29:01.28
> オーバーライドではない→コピペ
こういう解釈にいたる時点で日本語読解力がヤバい。
バグの温床としてオーバーライド < コピペだとは書いたけど、
オーバーライド無し -> コピペとは一言も書いていない。
299:デフォルトの名無しさん
13/06/26 12:39:13.32
コンストラクタで必ずsuper()を呼び出さないとアカンやつ大杉や!
300:デフォルトの名無しさん
13/06/26 14:45:51.34
オーバーライドがバグの温床なんていうのはいいすぎじゃないかな
依存関係からいっているのかな、だけど普通abstractクラスはそれを分散させないために使うんじゃない?
例えば描画と更新が必要なGUI開発やゲーム開発とかで
ArrayList<MyObject> objects = new ArrayList<MyObject>();
public void update() {
for(MyObject mo : objects) mo.update();
}
public void render() {
for(MyObject mo : objects) mo.render();
}
のように描画する対象物がどんな形でどんな役割であろうと同一化したほうがスッキリする場合、
abstract class MyObjectにして座標等のフィールドはprotectedにする。
で、update()メソッドもabstractにしてrender()に関しては場合による。
以降はMyObjectクラスを継承したMOBoxクラス、MOBarクラス、MOMenuクラス、
ゲームならMOPlayer、MOEnemy・・・
といったように本来の役割が違ってもかなり深く抽象化できて扱いやすいことは多いよ。(SwingのJComponentクラスがまさにこれだよね)
Decoratorパターンも導入しやすいですし。
301:デフォルトの名無しさん
13/06/26 20:09:38.19
たとえ具体クラスが一つしかなくたって、
ふくれあがった唯一神クラスを分割記述するためだけに
abstract使ってもいいのよ?
302:デフォルトの名無しさん
13/06/26 20:13:28.83
そもそも、目的にあった道具を使うもんじゃないかな。
勝手な想像だが、 >>291 は、道具の使い方や、使う場面を間違えてるんじゃないかと思う
カラフルな絵を書くのが目的のときに、
「黒しか出ないってなんだよ、エンピツつかえねぇ!」
↓
「エンピツ使うとか失敗するにきまってるだろ」
って言ってるように聞こえる。
303:デフォルトの名無しさん
13/06/26 21:07:21.54
インターフェースを定義した後にロジック実装の骨格を提供するのにも使うな > abstract
単にabstractを使う機会が無かっただけじゃない?
304:デフォルトの名無しさん
13/06/26 22:19:30.43
>ふくれあがった唯一神クラスを分割記述するためだけに
>abstract使ってもいい
意味や機能でなく
処理でクラスやメソッドを分けるのは
JAVAドカタの得意技だね
305:デフォルトの名無しさん
13/06/26 22:35:34.39
ロジック実装して初めてインターフェースは見えてくるもの
それがわかってないからたいてい抽象化が無意味になって失敗する
だいたい考慮すべきことが多いのに最初から一発OKな設計になるわけない
・引数にするか、メンバーにするか
・使うのはここだけか、何度も使うことになるか
・・・
306:デフォルトの名無しさん
13/06/26 22:39:41.25
>>305
>ロジック実装して初めてインターフェースは見えてくるもの
それはお前がドカタだから。
設計のできる人はそんなこと無いから。
307:デフォルトの名無しさん
13/06/26 22:51:51.03
処理によってクラスやメソッドを分けるのは当たり前じゃ?
それに違和感を感じるのはクラス分けると書けないいわゆるオブジェクト指向になれてない人か、
デザインパターンすら認めない?生きた化石じゃないか?
仕事を割り振ることを考えたらabstractが設計失敗なんてありえないと思うよ。趣味でやってるレベルでもわかる。
>>305
>だいたい考慮すべきことが多いのに最初から一発OKな設計になるわけない
同意だけど、abstract等で縛っていかないから抽象化が失敗するんだと思う。
>ロジック実装して初めてインターフェースは見えてくるもの
これを念頭に置くのは大反対。
抽象化しすぎると将来どうなるかわからないからpublicにしとけ的な設計が一番ダメに感じる。
見えてこないのはまさに修飾子を正しく把握していない、もしくは縛って自由を獲得する設計に慣れていないだけ。
308:デフォルトの名無しさん
13/06/26 22:56:42.35
>処理によってクラスやメソッドを分けるのは当たり前じゃ?
いやー、JAVAドカタって
ほんっっとにどうしようもないな
309:デフォルトの名無しさん
13/06/26 22:57:04.78
「このクラスについて詳しく見たわけじゃないけどこのクラスもあのメソッド使えそうだな」
これ、誰でもAPIで経験してるはず。
設計さんに感謝やで。
継承がバグの温床なんていったらバチあたるでほんま。
310:デフォルトの名無しさん
13/06/26 23:23:04.49
抽象クラスがなかったらコールバック関数に渡す無名インナークラスとかどうするんだよ
311:デフォルトの名無しさん
13/06/27 00:40:03.70
うむ。RCP息してない。
312:デフォルトの名無しさん
13/06/27 01:40:13.43
>>286
そういやそのへんの挙動、最近のupdateで何か変わってなかったっけ。
記憶違いかも知れんが。
313:デフォルトの名無しさん
13/06/27 01:40:54.77
処理によってクラス分ける利点は静的に扱うときに一番あらわれる気がする
動詞をクラス名にしたりね。
314:デフォルトの名無しさん
13/06/27 01:43:54.45
List<Object> list = new ArrayList<Object>();
みたいな書き方って海外の人あまりしないよね?なぜ日本ではこれが推奨されているの?
315:デフォルトの名無しさん
13/06/27 01:56:34.66
Javaのジェネリクスは保守的でコードレベルでタイプセーフにするだけだからな
Java8だかでインタフェースのメソッドがステートレスに実装可能になるらしいから驚き
316:デフォルトの名無しさん
13/06/27 02:17:56.80
>>314
海外ではどんな書き方なん?
317:デフォルトの名無しさん
13/06/27 02:27:14.62
>>316
普通に
ArrayList<Object> list = new ArrayList<Object>();
って書く人が多いように思う。
自分もそう書いていたんだけど
List<Object> list = new ArrayList<Object>();
のほうがいいよ的な意見もよく聞く。
だけどそういう人でも
JComponent button = new JButton();
ってのは書かずに
JButton button = new JButton();
と書く人が多い。
なぜArrayListのときはそういう書き方をするのか教えて欲しい。
318:デフォルトの名無しさん
13/06/27 02:38:07.98
>>317
意味論的にそれが有効だからとしか。
ArrayListはランダムアクセス可能なList
JButtonはSwingのボタンUIとして確固たる知名度と意味を持つ
てかJComponentは抽象度が高すぎるしね
319:デフォルトの名無しさん
13/06/27 02:40:12.03
そもそも前と後ろ同じじゃないとなんか感覚的に見た目気持ち悪いんだがどうなん
320:デフォルトの名無しさん
13/06/27 02:45:07.10
宣言側はアプリケーションで必要とされている意味論的に適切な抽象度で宣言する
生成側はパフォーマンス特性に合わせて無難または最適な物を生成する
321:デフォルトの名無しさん
13/06/27 02:46:01.29
>>314
こういうのってキャストとかしなくて大丈夫なん?
322:デフォルトの名無しさん
13/06/27 02:48:56.11
ArrayList (Java Platform SE 7)
URLリンク(docs.oracle.com)
通常、リストの同期をとるには、リストを自然にカプセル化するオブジェクトで同期をとります。
そのようなオブジェクトが存在しない場合は、Collections.synchronizedList メソッドを使用してリストを「ラップ」する必要があります。
これは、リストへの偶発的な非同期アクセスを防ぐために、作成時に行うのが最適です。
List list = Collections.synchronizedList(new ArrayList(...));
323:デフォルトの名無しさん
13/06/27 03:07:49.08
>>322
マルチスレッドでadd()等の処理をするときに同期どれよというのはわかってけど
まるで答えになってないよね?
324:デフォルトの名無しさん
13/06/27 03:15:37.97
The List Interface (The Java? Tutorials > Collections > Interfaces)
URLリンク(docs.oracle.com)
Here's a nondestructive form of this idiom, which produces a third List consisting of the second list appended to the first.
List<Type> list3 = new ArrayList<Type>(list1);
list3.addAll(list2);
325:デフォルトの名無しさん
13/06/27 03:20:07.47
>>321
オブジェクト指向言語で抽象度の高い方向(スーパーセット)にキャストするのは問題ない
ここら辺は個別に疑問を持つより基本を一通り知ってから考えた方がいいよ
326:314
13/06/27 03:41:15.24
>>324
そこじゃなくない?外国人が使っているよということを言いたいの?何が言いたいの?
リンク先で、
同じオーダー中に同じ要素を含んだ二つのListが等しくなるってのはわかった。
で、equals書くならhashCodeも一緒に書けよっていう某本にも書いてるその辺にも強いことがわかった。
これが答え?
327:デフォルトの名無しさん
13/06/27 06:21:34.84
外国・・・そうかなぁ? 個人的には>>320に同意。
例えば適切な抽象度のインターフェイスが別にあるのにArrayListとかHashMapと
いった実装クラスを引数として要求したり返値として返したりする公開メソッド
を持つクラスに出会った場合は、とりあえずその品質を疑ってかかる。
いわゆる「臭う」コードのよくあるパターンだと思う。
内部変数にしても例えばArrayList使って抽象度を下げるとListのような抽象度の
高い引数を受けにくくなるので、こちらも普通はListを使うかな。
ある場所での型の抽象度の低さはコード中の他の場所に伝染するんだよね。
328:デフォルトの名無しさん
13/06/27 06:40:22.65
>>318
その理屈はおかしい
JavaのListはランダムアクセスが効率的に行えることを保証しないので、
ランダムアクセスしたいならArrayListで受けなければならないということになってしまう
いや意識してそういう理由でArrayListならそれでいいと思うけどね
ジェネリクスでList,RandomAccessとする手もあるけど
内部でnewする変数にそこまでするのは現実的じゃないわな
329:デフォルトの名無しさん
13/06/27 06:56:02.07
>>325
ただしそれはオーバーライドがない時の話な
オーバーライドされたメソッドがある場合は派生クラスが厳密に規約を守っているか確認しなければ規定クラスとして使ってはいけない
オーバーライドしているとたやすくis aの関係が破壊される
規約を作れば良いというがその規約にバグがないことも規約が守られてることも保証することは難しく人の注意力に頼るしかない
だからバグが量産される
た
330:デフォルトの名無しさん
13/06/27 07:06:20.79
ListってまともにListIteratorで操作されてることは滅多にないよね
ランダムアクセスのためのインターフェースとしなかったのはJavaの大失敗の一つ
331:デフォルトの名無しさん
13/06/27 12:01:34.71
List をランダムアクセスにしたら LinkedList が List じゃなくなるじゃないですか
名前的に紛らわしい
332:デフォルトの名無しさん
13/06/27 13:37:26.26
予期せぬListの実装が引数に渡されたらどうなっちゃうの?
333:デフォルトの名無しさん
13/06/27 14:51:40.48
java.util.RandomAccessに代入可能かどうかで判定するのが
業界の慣習。一応。
334:デフォルトの名無しさん
13/06/27 15:20:23.50
String戻せば済むところをCharSequence返すメソッドは考えすぎだと思う。
メソッド引数としてはアリ
335:デフォルトの名無しさん
13/06/27 21:25:21.75
>>334
Androidの真似して
かっこいいと勘違いしたんだろ
336:デフォルトの名無しさん
13/06/27 23:59:50.59
StringBuilder返すところでホントはAppendable返したいのだが
IOExceptionがじゃまなの…
337:デフォルトの名無しさん
13/06/28 01:16:49.31
>>331
.NETはまさにそうなってるね
名前的には残念なことになってるが設計としてはアレが正解だわ
338:デフォルトの名無しさん
13/06/28 01:20:26.99
>>329
その話、アップキャスト関係なくね?
339:デフォルトの名無しさん
13/06/28 03:30:45.63
private int a;
private int b;
private int c;
public Constructor(int a, int b) {
this.a = a;
this.b = b;
// 引数a, bできまるcはこう書くべきなのか
c = a+ b;
// こう書くべきなのか、どっちがいいですか?
c = this.a + this.b;
// やはり前者?
}
340:デフォルトの名無しさん
13/06/28 03:40:28.29
>>339
前者にすべき。マルチスレッドに対応させる際に後者だと都合が悪い
341:デフォルトの名無しさん
13/06/28 04:03:42.53
>>340
把握しました
342:デフォルトの名無しさん
13/06/28 04:14:49.32
横レスだけど
後者だとどう都合が悪いの?
343:デフォルトの名無しさん
13/06/28 07:05:24.68
問題ないよ
344:デフォルトの名無しさん
13/06/28 07:30:16.62
>>340
最悪な回答だな
345:デフォルトの名無しさん
13/06/28 07:33:43.35
どっちでもいいだろ
コンストラクターが完了するまでは
オブジェクトの構築が終わってないんだから
他のメソッドに合わせてthisを使う必要はない
346:デフォルトの名無しさん
13/06/28 08:59:23.11
>>342-345
マルチスレッドにした場合は初期化中のオブジェクトにアクセスされる可能性がある。つまり
this.a = a;
this.b = b;
// ここでthis.aやthis.bの値が別スレッドから更新される可能性もある
c = a+ b;
その結果「引数a, bできまるc」という仕様が満たされないことになる
c = a+ b;なら別スレッドから何かされても仕様は満たされるが、
c = this.a + this.b;にした場合は、初期化中のオブジェクトが外部に公開されて
this.aやthis.bが変更される危険がないかConstructorクラス全体を調べなければならない
どちらの方が安全にコーディングできるか考えれば答えは明らかだよね
347:デフォルトの名無しさん
13/06/28 10:30:31.07
>>346
Java言語仕様読み直せ
348:デフォルトの名無しさん
13/06/28 10:36:23.41
>>339
コメントに沿った実装という意味では前者だな。
意味的にも前者のほうがいいんじゃなかろうか、そのコード片だけでは判断できんけど。
結果はどっちも変わらん。
349:デフォルトの名無しさん
13/06/28 10:41:16.57
cが引数a,bから決まるのでなくメンバのa,bから決まる値の場合は・・?
350:デフォルトの名無しさん
13/06/28 10:48:00.80
どこで>>346みたいな知識を仕入れたのか気になるんですが...
検証の仕方も思い浮かびません...
351:デフォルトの名無しさん
13/06/28 10:50:51.90
コンストラクタってスレッドセーフじゃないん?
352:デフォルトの名無しさん
13/06/28 10:51:08.41
>>349
その場合はそりゃ後者だろう。
353:デフォルトの名無しさん
13/06/28 10:52:26.29
The Java? Tutorials
URLリンク(docs.oracle.com)
JAVA覚えようぜ
354:デフォルトの名無しさん
13/06/28 11:37:29.87
>>346の謎解きをするスレはここですか?
>初期化中のオブジェクトが外部に公開
コンストラクタで外部にthis参照が逸出するときのことを言ってるんだろう。
ふつう、コンストラクタはthis参照を外部に公開しないように実装するものなんで、
そういう状況になること事態が実装上の不備だと思う。拙者そう思う。
355:デフォルトの名無しさん
13/06/28 12:26:37.11
コンストラクターがマルチスレッドって
ただのコーディングミスだろ
356:デフォルトの名無しさん
13/06/28 12:43:30.30
>>354
でもそれだとマルチスレッド関係ないよな...
357:354
13/06/28 12:50:39.56
>>356
俺はマルチスレッドの話をしたつもりだったんだが、お前はなんで俺の話がマルチスレッドと関係ないと思うの?
358:デフォルトの名無しさん
13/06/28 13:15:22.64
double checked locking 問題ではコード読んだ時の直感に反して
コンストラクタ完了前に参照漏洩してたりしたからなぁ。
あの手の問題あるとチェックしきれん。
359:デフォルトの名無しさん
13/06/28 14:28:50.08
>>357
シングルスレッドでも逸出させられる
360:デフォルトの名無しさん
13/06/28 14:38:54.68
B木を実現するjavaプログラム、難しいけどわかる人いますか?
361:桃白白 ◆9Jro6YFwm650
13/06/28 14:45:17.44
>>360
桃白白わかるよ。
362:デフォルトの名無しさん
13/06/28 15:01:04.41
スレッドAが生成した新オブジェクトを
ロック無しで確実にスレッドBに届ける方法は無く、
スレッドAがロックすれば確実に初期化された新オブジェクトが
全スレッド間で共有されてしまうので
正直 ど う で も い い
363:デフォルトの名無しさん
13/06/28 15:04:35.49
自分も前者がいいな。10文字少ないので。
364:デフォルトの名無しさん
13/06/28 15:06:40.22
>>361
すみません、教えてください。
365:桃白白 ◆9Jro6YFwm650
13/06/28 15:09:21.89
>>364
B木のなにを知りたい?アルゴリズム?インプリメンテーション?
値を追加するところ?値を削除するところ?値を検索するところ?
どのあたり?
366:デフォルトの名無しさん
13/06/28 15:15:09.70
>>350-351
TSM01-J. オブジェクトの構築時にthis参照を逸出させない
URLリンク(www.jpcert.or.jp)
367:デフォルトの名無しさん
13/06/28 15:16:16.75
>>365
値の追加、検索、削除が出来ればOKです
初めに任意で最大の子の数を入力する所から始めたいです
368:桃白白 ◆9Jro6YFwm650
13/06/28 15:34:04.09
>>367
コード欲しいってことね。
桃白白もいくつかコード眺めてみたけど、奥村さんのコードが一番きれいだと思う。
『Javaによるアルゴリズム事典』サポートページ
URLリンク(oku.edu.mie-u.ac.jp)
369:デフォルトの名無しさん
13/06/28 15:50:38.71
>>368
ここに置いてあるzipファイルの中の「BTree.java」ですよね?
ありがとうございます!これを参考にします。
370:桃白白 ◆9Jro6YFwm650
13/06/28 15:55:43.37
>>369
はい、それです。
371:デフォルトの名無しさん
13/06/28 20:15:07.51
JavaScriptは板違い
ローカルルール読んでこいよ異常者共
372:デフォルトの名無しさん
13/06/28 20:39:57.59
自作クラスの感想などを頂きたいのですが、スレ違いでしょうか?
373:デフォルトの名無しさん
13/06/28 20:42:02.65
相談のうちには入る…のかなあ
374:桃白白 ◆9Jro6YFwm650
13/06/28 20:49:48.68
>>372
いんじゃないの。書いちゃいなよ。
375:デフォルトの名無しさん
13/06/28 21:26:55.04
>>374
自分のコードの感想言われたらファビョる奴が良く言うよ
376:372
13/06/28 21:27:03.75
ソースファイルが6つあるので、こちらにアップしていて遅くなりました。
URLリンク(sourceforge.jp)
コーディングを補助する目的で作った文字列テーブルです。2ヶ月ほど前にJavaの勉強も兼ねて作りました。
(「TableTest.java」にとりあえずの使い方が書いてあります)
377:デフォルトの名無しさん
13/06/28 21:32:12.78
おまいらIdeoneぐらい教えたれよ
378:デフォルトの名無しさん
13/06/28 21:32:33.32
sourceforgeねぇ
379:デフォルトの名無しさん
13/06/28 21:48:31.18
>>376
System.out.println( "Table file : ファイル名を指定してください" );
return false;
のようなものは
throw new IllegalArgumentException( "Table file : ファイル名を指定してください" );
のようにしておけ
false 返しても結局戻り値チェックしないんだし、エラーを無視して実行を続けるより死ぬ方がいい
特別に理由があって死にたくないときは try catch すればいい
380:372
13/06/28 22:04:25.51
Ideoneにも上げました。Sourceforgeの方は消したいと思います。
URLリンク(ideone.com)
URLリンク(ideone.com)
URLリンク(ideone.com)
URLリンク(ideone.com)
URLリンク(ideone.com)
URLリンク(ideone.com)
URLリンク(ideone.com)
381:デフォルトの名無しさん
13/06/28 22:08:09.94
ideoneやcodepadは英語サイトだから利用規約や制限事項や禁止事項がわからないし、利用料金や支払い方法もわからん
382:372
13/06/28 22:32:42.03
>>379
わかりました。
引数のチェックでは throw new IllegalArgumentException を使うのが一般的なんですか?
383:デフォルトの名無しさん
13/06/28 23:49:28.98
メソッドのコメントに
//- こういうの流行ってんの?
384:デフォルトの名無しさん
13/06/29 01:37:41.96
一個目のファイルしかみてないけど、Javaな人はあれみて何も思わないの?
俺、すげー気持ち悪いんだけど。
setHead, setPrimary, set, file、全部キモい。
addとかappendとかkeyとかindexとかcolumnとかpush_backとかなんかそんな概念じゃないのか?
まあ、かろうじてinsertはありなのかもしれないが。
385:デフォルトの名無しさん
13/06/29 01:42:53.74
あと、列データとかtokenとか、一体どこ経由でこのコードにたどり着いたんだ?
386:デフォルトの名無しさん
13/06/29 02:51:57.69
突っ込みどころが多すぎる
列を追加してるのにsetHeadというメソッド addだろ
標準出力するだけのクラス tableを受け取るメソッドかtoStringに書けばいい
トリッキーなgetterとsetter 座標指定で十分
同一パッケージから直接変更し放題のフィールド 大事な値をうっかり壊しちゃうかもよ
何でもpublicメソッド エラーメッセージとか外から呼び出すの?
別のクラスに投げるだけなら直接呼び出せ
ファイルが閉じられない可能性がある
Exceptionでキャッチすんな
...
387:372
13/06/29 03:00:41.42
>>384-385
insertは、なぜありなんでしょうか?Javaというか、オブジェクト指向に触れて3ヶ月ほどなので、
その概念というのがちょっとわからないです・・・。メソッドの持つ役割とかですか?
列データやtokenなどは、いい加減に書いてしまいました。
ArrayListを入れ子にしているので、行列のフィールドに対するコメント文です。
388:デフォルトの名無しさん
13/06/29 05:13:45.52
>>387
慣用的に使われる用語とその組み合わせというのがあって、大抵それは求めれば他のソフトウェア
技術や数学用語にちゃんと由来が見つかる。
例えばデータ構造として表(table)という名前を使うのであれば列(column)や属性(attribute)、
行(row)やタプル(tuple)という言葉と組で使うのが慣用的。これらの用語は関係データベースの
世界に由来の一端(全てではない)があって、この世界ではrelation・attribute・ tupleかtable・
column・rowの組で使う(厳密にはこの二つの組は異なる概念なので混ぜるのも良くない)。
あとPrimary、これも元々関係データベースから来た用語だけど、数ある候補キーの中から一つ
を選んで主キー(primary key)とするのであって、PrimaryKeyならともかくPrimaryだけでは
意味をなしていない。無難なのはKeyColumnかな。
操作に関してもtableにinsertとはおぉDB的だなぁと思ったらsetと出てきてずっこける。
DB的にupdateとするとややずっこけ感は少ない気がする。
setHeadは三重の意味で良くない。一つは上記の通りheadという名前。二つ目は列の「追加」
なのにsetという用語を使っていること。最後にsetHeadというメソッド名はJava Beansの
規約でtableのheadプロパティの値をセットするメソッドに使う必要があること。
389:デフォルトの名無しさん
13/06/29 05:45:43.21
要約:クラス設計がレビューされていないような品質
390:384
13/06/29 07:41:48.98
>>388
あまりにアレ過ぎて言語化できなかったんだけど、すっきりしたよ。ありがとう。
俺、Javaは初心者なんだけど、Javaな世界ではあんな感じが普通なのかと思ったよ。
誰も何も言わないから。
391:デフォルトの名無しさん
13/06/29 08:25:23.88
名付け規約に準ずるのは当然だが、
あまりにしつこい社会主義のようだと、せっかくの創造性がつぶれる
もともと日本人には発想性がある人が少ないのに、さらに減ってしまう
ジャワみたいにばかみたいに長い名前をつけるのもどうかと思うがな
コンパイル後も短いシンボルになってないので、実行時の翻訳にムダな時間がかかる処理系もあるだろう
392:デフォルトの名無しさん
13/06/29 08:58:37.24
今のところコード品質に関する指摘は>>386だけだな
他は識別子の名前についてガヤガヤ言ってるだけで特に耳を傾ける必要はない
コーディング規約読めばそれで理解できる話だし
393:デフォルトの名無しさん
13/06/29 12:47:46.80
包含関係がしっかりしていれば長い名前空間も苦にはならないが、そうなっていない
StringとStringBufferの区別は本当に必要なのか、とか
394:デフォルトの名無しさん
13/06/29 12:52:19.11
なるほど、不変オブジェクトだけで十分、と。
395:デフォルトの名無しさん
13/06/29 12:56:03.85
可変オブジェクトだけで十分、っていう意味かもしれないじゃない
396:デフォルトの名無しさん
13/06/29 14:25:16.00
>>392
名前超大事
397:デフォルトの名無しさん
13/06/29 15:39:30.97
>>396
チーム開発なのか個人開発なのか
ライブラリとして提供するのか
色々シーンあるだろ。個人開発なのに名付け規則に神経すり減らすのはエネルギーの無駄
398:デフォルトの名無しさん
13/06/29 15:48:00.90
名前に神経すり減らすんじゃなくて
>>397みたいな奴が妥当な名前を付けられないってだけ
399:デフォルトの名無しさん
13/06/29 16:56:30.39
会社の歯車がプログラムの歯車をつくるような環境って事か
それは自由がないわな かわいそうだな...
400:372
13/06/29 17:19:07.84
>>386
別のクラスに投げるだけなら、といのは、ファイル入出力や画面への出力は、
同じクラスにメソッドとして持たせるという意味合いで合ってますか?
それとも、ひとつのJavaファイル内に複数のクラスを書くということでしょうか?
何でもpublicメソッドなのは、正直、アクセス修飾子の使い方をわかっていませんでした。
401:372
13/06/29 17:58:10.67
>>388
知りませんでした。メソッド名は
(setHead -> add)、(setPrimary -> setKeyColumn)、(set -> update)、(get -> select)
こういう風にすればいいですか?
402:デフォルトの名無しさん
13/06/29 17:59:31.16
> 正直、アクセス修飾子の使い方をわかっていませんでした
( ゚д゚ )
403:デフォルトの名無しさん
13/06/29 18:52:47.47
そもそも、コンセプトとして、いわゆるDBのテーブルを想定しているのか、Excelのシート、つまり
二次元のデータの入れ物を想定しているのかがわからない。
そういう意図を表明するという意味で、名前重要。
404:デフォルトの名無しさん
13/06/29 18:59:40.27
命名規則に話が集中しているのはそこがあまりにタコだと実装のレビューをしようにも読む方が
無駄な努力を強いられて嫌になるから。Tableクラスだけでもなかなかの忍耐が必要。
一人で書き捨てするコードならともかく、人に読んで貰うなら命名規則や慣用は要尊重。
無知を言い訳したオリジナリティーの発揮は単に有害。初心者こそ模倣から始めるべき。
・適切なクラス名やメソッド名が解らないのであれば既存のライブラリのAPIから似たような
ことをしているクラスやメソッドの名前を探して真似をする。
・適切なコメントの付け方が解らないのであれば既存のライブラリのソースコードを調べて
(クラス名に.javaとつけてググればいくらでもヒットする)真似をする。JavaにはJavaDoc
形式というコメントの付け方が定義されていて、これ以外の独自コメント形式は単に迷惑。
・適切な変数名が解らなければ既存のライブラリのソースコードを調べて(以下略)
解らなければまず調べよう。
初学者ほど何故か調べない、真似をしない、コンパイル時のエラーメッセージも読まない不思議。
405:デフォルトの名無しさん
13/06/29 19:03:01.06
クラス定義時の一般論として
・フィールドは基本private。さらにfinalに出来ないか検討する。Tableのtableなんかは
finalに出来る。finalではないpublicは御法度。protectedも慎重に。
・フィールドの型は特別な事情が無い限りHashMapといった実装クラス名よりもMapと
いうインターフェイスを用いた方が一般的に設計の抽象度が上がって実装に柔軟性が出る。
・データの重複はバグの温床なので避ける。例えばrow_no、row_sizeなんてフィールドが
用意されているけれども、table.size()等で代用できないか検討する。パフォーマンス?
それは素直で安全な実装で大敗してから考えるべき。
・特別な事情がない限りファイルIOは直接手作りしない。例えばTableクラスの場合は
write(DataOutput out)、readFields(DataInput in)というDataInput、Outputを使って
読み書きするメソッドを用意するのがお薦め。これだけでTableクラスをファイルに保存
することも、ネット経由で投げることも、Hadoopでビックデータ解析(笑)にも使える。
あるいはJAXBやJacksonを使ってXMLやJSONへマッピングする方法を検討する。
続く。
406:デフォルトの名無しさん
13/06/29 19:05:40.12
Tableクラスに関するとりあえずのコメントとして
・カラムの型や名前をバラバラのMapで管理しているのはあまり良くない。素直にカラムの
定義を扱うTableの内部クラスを用意して、
public static class Column{public final int index; public final String name; public final String type;}
これのリストをスキーマとして定義する。必要であればルックアップテーブルも。
private final List<Column> schema = new ArrayList<Column>();
private final Map<String, Column> nameToColumn = new HashMap ...
スキーマ情報を提供する公開メソッドも用意すると親切だよね。
public List<Column> getSchema() {return Collections.unmodifiableList(schema);}
public List<Column> getColumn(int index) {return schema.get(index);}
public List<Column> getColumn(String name) {return nameToColumn,get(name);}
・検索結果に一個結果を追加する度にサイズを+1した配列を生成して内容を全件コピーする
凄いコードを見たような気がするのは気のせいだよね・・・素直に可変長であるList
を使うべき。返値もListで良い。
・for(int i...)ではなく拡張for構文を使ってくれた方が読みやすい
・・・この調子で書いていくとどうなるのだろう・・・