[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 07/13 07:04 / Filesize : 160 KB / Number-of Response : 657
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

★★Java質問・相談スレッド162★★



1 名前:デフォルトの名無しさん mailto:sage [2013/06/09(日) 20:27:10.93 ]
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    pc11.2ch.net/hp/
Webプログラミング pc11.2ch.net/php/
をご利用下さい。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 (p)ttp://www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」

前スレッド
★★Java質問・相談スレッド161★★
toro.2ch.net/test/read.cgi/tech/1364006637/

29 名前:デフォルトの名無しさん mailto:sage [2013/06/11(火) 21:39:40.47 ]
イマドキのOSをネットに繋いで普通に運用していたら、
システム時刻なんてしょっちゅう変更されているはずなのだけれど?

30 名前:デフォルトの名無しさん mailto:sage [2013/06/11(火) 21:49:33.63 ]
JavaSEがCookieやSSLを実装している以上、時計あわせはジャバラーの義務っ

カレンダで試用制限とかしてるアプリ職場に押しつけられると、
カレンダ偽装する奴が増えてトラブルになるんでやめろー

31 名前:デフォルトの名無しさん mailto:sage [2013/06/11(火) 22:27:30.64 ]
>>29
どうせ時刻逆転のケースだろ
近代的オペレーティングシステムで
普通それはない

32 名前:デフォルトの名無しさん mailto:sage [2013/06/11(火) 23:40:51.41 ]
関数の計算結果を自動的にグラフ作成し 画像として
ホームページなどに表示する手順などを解説している
サイトや著書などを知ってる方おりましたら

おすすめをお願いします。

33 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 00:21:15.97 ]
三角関数や対数程度でいいのなら「Processing」でアマゾンぐぐれー

34 名前:デフォルトの名無しさん [2013/06/12(水) 00:28:24.66 ]
サーバーでgnuplotでも動かせばいいじゃない
Javaで調べるとまずアプレットが出てくると思うけどそれだけはやめとけ

35 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 00:42:51.42 ]
・HP掲載のJavaとJavaScriptを勘違いして質問している
・HP掲載のJavaAppletでの表示の話
・サーブレットの動的HPの作成の画像作成の話

36 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 00:44:22.00 ]
JAVAのGUIアプリでグラフ画像とHTML自動生成の話という可能性も微レ存

37 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 01:18:33.60 ]
グラフならd3かhighchartだな今なら。



38 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 01:38:51.62 ]
質問するところを間違ってしまったみたいで申し訳ないです
>>33 >>34 >>35 >>36 >>37
ありがとうございます

早速Amazonにあった本や論文などを学校の図書購入希望
やキャットで検索や閲覧希望ぶち込みました。

39 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 04:18:35.20 ]
Java Platform Standard Edition 7 ドキュメント
docs.oracle.com/javase/jp/7/

このドキュメントのダウンロードのzipとか無いの?昔は日本語ドキュメントをダウンロードできた気がしたんだけど

40 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 04:23:23.32 ]
そもそも何で日本語だけこんなに贔屓にするんだろう?日本顧客が結構金蔓なのか?

41 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 04:24:07.53 ]
まさか日本政府が要求してたり?

42 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 05:36:13.30 ]
IT後進国の馬鹿な日本ぐいしかもうJava使ってる国が無いんだろう

43 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 06:22:38.99 ]
日本GUI

44 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 06:38:49.80 ]
なぜオーバーライドをデフォルトにしたのですか?
継承先にこのメソッドを破壊された場合はどうしようなどと考えるとテスト項目を作るのが億劫です

45 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 07:04:45.00 ]
そういうOOPのノウハウの多くはそもそもJava開発で蓄積されたものだからだろ
例えば後付けで追加された@Overrideなんか明らかに設計失敗の証拠で、
本来なら後発のC#と同じくoverride修飾子を付けないとコンパイルエラーとするべきだった
昔は継承は既存コード再利用のための強力な仕組みだとか言ってたけど
Javaによって色々問題点が明らかになって今は大分考え方が変わったからな

46 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 07:17:29.26 ]
>OOPのノウハウの多くはそもそもJava開発で蓄積されたものだからだ
JAVA信者の基地外っぷりもここまでいくと
人としてやばい

47 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 07:24:36.07 ]
「継承先にこのメソッドを破壊された場合はどうしよう」などと悩むのはどんな
ケースだろう?

オーバーライドされたり派生クラスで実装が与えられたときの振る舞いを注意深く
扱うのはprotectedかabstractなメソッドぐらいであって、その他publicなメソッド
についてはあまり気にしないけれどもなぁ。
いくらオーバーライドを禁止したところでデコレーター使えばいくらでもpublic
メソッドの実装なんて差し替えられるわけだし。



48 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 07:26:43.77 ]
オーバライドって元々は、既存コードは変更しないというルールの下で
既存コードが変更できないなら上書きすればいいじゃないという考え方が基本だから
後から勝手に何でもかんでもオーバライドできたほうがいいわけ
今ではそういうやり方は糞と考えられてるが

49 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 07:32:15.56 ]
>>47
publicメソッドを同じクラス内から呼んでる場合があるだろ?

50 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 08:10:24.00 ]
とりあえずコンストラクタからpublicメソッド呼ぶのやめい

51 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 11:55:50.72 ]
なんで?

52 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 12:17:51.42 ]
親クラスプログラマにしてみれば、
コンストラクタぐらい目の行き届くとこでやって欲しいし、
子クラスプログラマにしてみれば、
自分のコンストラクタ始まる前にインスタンスメソッド呼ばれても困る

PMD使えばまとめて検出できるよ

53 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 12:50:33.87 ]
消えろじゃヴぁ

54 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 13:16:22.61 ]
仕事のない糞言語から目の敵にされる我らがJAVA様

55 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 13:52:48.75 ]
ピーターの法則:
組織において有能な人間は昇進しより高い能力を求められ、無能になったところで昇進が止まる
ゆえに組織のいたるところ無能な人間で満たされる

これを人間からソフトウエアに置き換える

たとえばWindows, たとえば C,Java
これらは有用と評価され普及度を高め、クソと評価されるあたりで普及が止まった

これらに対し、社会経験のない中二病、もとい、お子さまは
世の中はクソで満ちあふれている、俺が何とかしなければと情熱を燃やすのである

なお、それが非常にうまく行った場合、結局は上の行程を繰り返すのみ

56 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 14:52:03.59 ]
Windowsって普及止まったの?CEのこと?

57 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 20:04:01.93 ]
>>52
C++最高というわけですね



58 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 20:11:05.29 ]
真のプロフェッショナルはクラス利用者の勝手な継承を許さないようにコーディングする
どうしても継承したい場合はユーザーが自分でラッパーを書いてそれを継承しなければならないように作る

59 名前:デフォルトの名無しさん mailto:sage [2013/06/12(水) 23:57:31.36 ]
初心者向けの本で、

> 継承の仕組みを利用した書き方を、『差分プログラミング』とも呼びます

なんて読んだことがあるけど…。
差分で済むから継承、なんてやってたら、is-a関係がとんでもないことになるよね…。

まずは全てのクラスをfinal & イミュータブルにするのが基本。
状態変化を持つクラスだけ、1つずつアクセス範囲を検討するのが良いんだろうな。

60 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 00:10:46.99 ]
なぜC系言語しかやってこなかった人は意味も無くpublicにするのだろうか
外から見える分得だと思ってるんだろうか
例え将来的にpublicに使うとしても、もしその瞬間には必要ないのなら時がくるまで閉じておけ。社会の窓を。

61 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 00:18:52.52 ]
>>55
Windows8は止まることなく退化を続けてるよ。
>>52
別に子クラスが仕様を満たしてなかろうと、親クラスが壊れるわけじゃないからいいだろ。親クラスのここを通って、ここのサブルーチンを…とか言ってる奴じゃないかぎり。

62 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 00:25:46.46 ]
昔ながらの品質保証部とかが
「外部から観測できない手続きは禁止」
とかいってprivateを毛嫌いしてるんじゃね?

63 名前:デフォルトの名無しさん [2013/06/13(木) 00:52:11.93 ]
>>48のような考え方で作ろうとしたら必然的にprivateフィールド禁止になるぜ
親クラスは変更しない前提だからカプセル化する必要もない
実際、サブクラスの自由度のためにフィールドは全部protectedにするという
規約はそう珍しくないし

64 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 05:37:23.14 ]
protectedなフィールドが一番使用頻度が低いなぁ。

publicかprotectedなアクセサがあれば十分だと思うのだけど。フィールドを裸単騎で
子孫クラスに晒す必要性が殆ど無い。

privateでないフィールドはpublic static finalぐらいしか普段は作らない。

65 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 05:49:06.23 ]
老害はカプセル化の意味も知らないんだろうか

66 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 06:38:24.62 ]
アクセサさえ通してればカプセル化だと思ってる>>64みたいな奴は非常に多いよね

67 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 06:56:19.19 ]
必要条件と十分条件の区別も十分につかない>>66みたいな奴も非常に多いよね。



68 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 07:12:53.36 ]
既存クラスは変更せず、必要な変更はオーバライドによって行うという条件なら
フィールドはとりあえずサブクラスから好きに触れるようにしないと仕方ない
という話に対して、アクセサ使えばいいと言うのは的外れだろう
結局片っ端からアクセサで公開することになり問題の本質は変わらん

69 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 07:27:31.01 ]
派生でオーバーライドやり放題だと全部パブリックと大差ない
やろうと思えば基底を無視して全部上書きも出来るのだから
それでは基底を引数に受けとるメソッドはどうやってテストすればよいのか
膨大な量になるぞ
派生が作られるたびに今まで作って来た基底を引数に受けとるメソッドを追加でテストしなければならない

70 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 07:33:48.09 ]
>結局片っ端からアクセサで公開することになり

ならないよ。

子孫クラスに対して実装の詳細を隠すことも知らないのであれば、とりあえず
クラスの設計をする手を止めて既存の有名どころのライブラリやフレームワーク
のJavaDocでも色々読んだ方が良い。

protectedフィールドで内部状態を子孫にガンガン公開している実装なんて
どれほどあることやら。protectedはabstract methodと同様に継承によって機能
拡張できるポイントとして慎重に、かつ詳細なドキュメントと共に定義されて
いるのが殆どだと思うが。

71 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 07:38:42.12 ]
>>69
基底クラスのメソッドにこのメソッドは○○しなければならないと明記しておいて、
受け取る方のメソッドには引数として受け取ったインスタンスのメソッド××を呼び出すと明記しておく。

テストでは受け取る方のメソッドが××を実際に呼び出してるかどうかテストすりゃOK。

72 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 10:15:53.42 ]
メソッドのオーバーライドを出来ないようにしろで終わる話なのに
オーバーライド出来るケースの話を延々とするチンパンジー達

73 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 10:46:11.91 ]
カプセル化と継承による機能変更は両立するものではない

74 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 13:54:02.01 ]
アグリゲーションとコンポジットの違いがあるからには、private一点張りじゃなくて、protectedが必要なこともある。

75 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 15:47:20.50 ]
publicがオブジェクトの使用者向けのAPIであるようにprotectedはクラスの
開発者向けのAPIの一部だから。

finalでないpublicフィールドの公開がまずあり得ないようにfinalでない
protectedフィールドの公開もあまり無い。protectedフィールドを再代入
出来る形で子孫クラスに公開したところで、再代入したら何が起こるかは
詳細にドキュメントに書くか、あるいは親クラスのソースを遡って影響範囲
を検討する必要がある。大抵便利でも安全でもないので普通に避ける。
実装の詳細に関する知識を共有した見知った範囲の人間がコードを弄る際の
手抜き程度しか出番は無いと思う。

protected finalも、例えばハンドラ等のオブジェクトを子孫クラスに触ら
せる場合はフィールドよりゲッター使った方が色々便利なのであまり出番が。
使用者には公開しないプリミティブ型や文字列の不変値ぐらいか。

76 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 16:27:36.93 ]
どうして基地外ほど長文を書きたがるんだろう

77 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 17:19:55.61 ]
フィールド全部protectedとかprivate禁止とかありえんだろ。



78 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 19:22:14.27 ]
リスナーとかデザパタ実装するならオーバーライド便利やねん
てかそういうときだけしか使わんけどねん

79 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 19:24:39.46 ]
>デザパタ実装するなら
この考え方がまさにJAVAドカタ

80 名前:デフォルトの名無しさん mailto:sage [2013/06/13(木) 20:27:32.83 ]
privateだと舐めるな!
こっちにはリフレクションがあるんだぞ!

81 名前:デフォルトの名無しさん mailto:sage [2013/06/14(金) 04:33:21.59 ]
ドカタはリフレクション使えないから心配ない。

82 名前:デフォルトの名無しさん mailto:sage [2013/06/14(金) 05:03:36.73 ]
リフレクションは設計崩壊の産物
ダイナミックキャスト並みに要らない

83 名前:デフォルトの名無しさん mailto:sage [2013/06/14(金) 05:34:38.03 ]
ドカタがリフレクション使う必要は無いけれどもドカタでも使えるものを作るには
リフレクションも必要なんだよ。比較的真面目な話として。

フレームワークのAPIとしてはキャストやリフレクションが不要な綺麗な設計に
なっているのに対してフレームワークの実装中ではjava.reflectやCGLIBの類を
ガンガン使っているのは割と普通。
アノテーションとかも定義済みのを使っているうちはリフレクション不要だけど
自前で定義し始めると簡単なリフレクションを使う必要があるよね。

84 名前:デフォルトの名無しさん mailto:sage [2013/06/14(金) 06:05:24.94 ]
フレームワーク実装したこともない奴がフレームワーク実装の話をするチンパンジースレ
難読化もできないしな

85 名前:デフォルトの名無しさん mailto:sage [2013/06/14(金) 19:34:43.32 ]
Javaの基礎の本と、Eclipseの本でいいのがあったら教えてください

86 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 00:59:36.75 ]
プラグインありきのeclipseなのに、それ系の本買う奴ってマジで馬鹿だと思う
あんなもん直観的にわかるだろ。まぁ俺も昔1冊買ったことあるけど

87 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 01:19:43.22 ]
>>85
かっこいいやつ
タイトルは覚えてないが自分がこれから使うバージョンを解説したものを選べ

>>86
じっくり機能を把握したいじゃん♪
3000円越える本は図書館にリクエストを出すという手がある。



88 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 01:39:47.29 ]
if文の書き方なんですが、

if( !(src.equals(dst))) { 〜〜
というのと、
if( src.equals(dst) == false ) { 〜〜
というの、どちらが慣習的に普通なんですか?

不毛な質問でごめんなさい。

89 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 02:04:17.88 ]
慣習じゃなくてjavaでオブジェクトの比較を行うとき
その2つは判定方法が違うんですけどー(プリミティブ型は除く)

equalsはオブジェクトが同じなら真を返すけど
==は生成されたインスタンスが違えばオブジェクトの中身が同じでも偽になる

90 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 02:49:28.95 ]
>>88
boolean型なら、どっちでも動作は変わらないんだけどね。
前者が極めて一般的。

あえて後者を使っていた場合「すごく複雑な論理演算の結果、falseなんだぞ!」という強い意図を表してる。
コードの読み手は、そこに何かトリッキーな仕掛けがあるんじゃないかと疑うのよ。

だから、ごく普通のif文では if(xxx == false) とか if(xxx == true) は使わないな。

91 名前:デフォルトの名無しさん [2013/06/15(土) 02:52:24.79 ]
!だと見落としのミスが増えそうな印象
(事実、俺はよく見落とす)

92 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 03:53:50.62 ]
一般的とかそういう感覚じゃねーから

93 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 05:01:16.96 ]
気持ち悪いならnot_equalsでも作れ

94 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 07:11:23.97 ]
javaの初心者です。
質問さして下さい。
オブジェクトの比較で
  == を使うときって、そのインスタンスのハッシュ値が同等の時だけtrueですか?
また、
eaualsを使うときは、そのインスタンスの中身さえ同じならばtrueですか?
どなたかご教示ください。

95 名前:94 mailto:sage [2013/06/15(土) 07:12:47.96 ]
あ、88さんも同じ質問してたみたいですね。
すみません。

96 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 07:19:25.24 ]
質問さしてください。
javaをある程度学んで、NetBeensってやつで
メニューとJTextAreaをペタってはって、JFileChooserでファイルを選んで
File file = filechooser.getSelectedFile()で
Fileのインスタンスを得て、JTextAreaに表示するだけって事をしたいんですが
JTextAreaの変数(ここではtxtareaとします)
txtareaのどのメソッドを選んで、どういう処理をしていけばいいんでしょうか
しょうもない質問ですが、ご教示ください。

97 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 08:27:38.96 ]
>>94
>>89



98 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 08:40:34.35 ]
>>96
ttp://www.javadrive.jp/tutorial/jfilechooser/index5.html

99 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 08:46:12.36 ]
テキストエリアの一部の文字だけ文字色やフォントを変えることは出来る?
自分で文字位地と長さ調べて別のテキストエリア貼らなきゃダメかな

100 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 08:49:26.88 ]
質問する奴は名前欄に番号書けよ・・・
同じ奴なのか別人なのかわからん

101 名前:94 mailto:sage [2013/06/15(土) 10:57:25.36 ]
すいません。
>>89を見たんですが
自分の書いた>>94の考え方でも良いのでしょうか
良ければ、良いと、違うなら、違うと
どなたか、答えてくれませんでしょうかお願いします。

102 名前:桃白白 ◆9Jro6YFwm650 [2013/06/15(土) 11:49:32.63 ]
>>101
すこし違う。
==はReference Equality Operators。
つまり、参照同じ演算子。
同じオブジェクトを参照してたらtrue。

hashCodeはオブジェクトが異なるときはできるだけ違う整数を返すようにしましょうと
されてるものなんで、==がfalseのとき、hashCodeも違ってくるものなのだけれども、
hashCodeを参照して==の結果が決まってるわけじゃないっすよ。

equalsはequalsの実装しだいなのだけれども、Objectなんかは
参照が違ってたらequalsがfalseを返しちゃう。なので中身が同じならと
一概に言えるわけじゃない。

103 名前:桃白白 ◆9Jro6YFwm650 [2013/06/15(土) 11:53:32.16 ]
>>102
>==がfalseのとき、hashCodeも違ってくるものなのだけれども、
equalsがfalseのとき、hashCodeも違ってくるものなのだけれども、

104 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 11:54:20.70 ]
基本情報を取らない弊害がまた出たな
基本情報をちゃんと取っていれば
値、参照、ハッシュ値の違いなどで悩む事はなかったのにね

105 名前:桃白白 ◆9Jro6YFwm650 [2013/06/15(土) 11:56:49.38 ]
>>104
百済ねえやつ。百済からの回し者か?百済に帰れ。

106 名前:94 mailto:sage [2013/06/15(土) 13:03:57.66 ]
>>102
なるほど、ありがとうございます。
それよりなにより
俺みたいな中途半端な質問でも
解かりやすく、詳しく説明してくれたことに
感謝感謝です。

107 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 13:35:30.16 ]
>>99
普通に<font>タグで変えられるよ。
本物のswingプログラマはjavax.swing.text.AttributeSetを使うが、ひたすら面倒



108 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 13:48:42.31 ]
オブジェクト間の==は同一インスタンスの時だけtrueで、
Object#equals()実装も同様。

それ以外は何でもありで、HashMapとかでトラブル起こしても、
それはequals()やhashCode()のオーバーライド仕様を明記できてない発注者に全責任がある。

109 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 14:56:37.50 ]
仕様に明記する暇にコードかけると思うんだが上流工程ってそんなに暇なのか?
新人の時にコード内容までキッチリすべて(ただし日本語で)書いてある仕様書みた時は自分の目を疑ったよ
そのうちエクセルコンパイラ作るやつが現れるんじゃないかと古株の先輩にジョークを飛ばしたら苦い顔をされたな

110 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 15:02:43.34 ]
ドメイン分析できてないと、ほどよく高速に散らばるハッシュ値実装は難しくね?

111 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 15:40:17.69 ]
なぁ、oracle のjava プログラマのSilverを取ろうと思って
対策本買って、一通り解けたけど
ホームページの例題で初期化ブロック使ったようなコードがあったり
するんだけど、どこまでの知識がいるの?
もうわかんねーよ。

112 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 15:46:20.15 ]
オブジェクトの論理等価性について事前の分析はきっちり必要だけれどもそれを実際に
equalsやhashCodeとして実装する際は無理に手作りせんでもEclipseでダイアログ開いて
フィールドぽちぽち選択してOKして自動生成させた方が大半のケースで安全確実だと思う。
比較の抜けや一般契約違反も無いし。

113 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 16:40:52.44 ]
>>111
初歩的な内容しか出ないよ

114 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 19:25:04.46 ]
Stringの#hashCode()と#equals()で、昔から疑問に思ってることがあるんだけどさ。

equals() の中で1文字ずつチェックする直前、
自身と他者のhashが0でないとき、
つまり両者のhashが確実に計算済みであると保証できるとき、
hashが一致しなければ中身を見るまでもなくfalseを返す。

って実装にすれば、もっと速くなるんじゃね? と思うんだけど。
何か問題でもあるのかね?

115 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 19:44:50.78 ]
問題はないだろう

116 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 20:09:25.78 ]
超基礎的な部分だから、移植性を考慮してシンプルな実装にしときたかったんじゃない?
マルチスレッドで気にすることが増えそう
今のJavaの仕様だと特に問題はないだろうけど

117 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 20:51:06.38 ]
ハッシュ値を計算するコストの問題だと思うよ。

実際ハッシュ値ってイミュータブルなオブジェクトを除いてhasnCode()が呼ばれたら
安直にその都度計算している実装が多い。そしてaとbがイコールであることを調べる
コストとaとbのハッシュをそれぞれ計算するコストは極端には違わない。
仮にaとbのハッシュ値が同じでも改めてイコールであることを確かめる必要があるので
ハッシュ値を使っても二度手間になるというかかえって遅くなりそう。

イミュータブルだったり賢いハッシュ値の更新管理をしているクラスであればその
equals内でハッシュを使うのは当然ありだけど、そういう最適化は各クラスの実装の
中で閉じているべきであって、それらをフィールド値として持つクラスは各クラスが
最適なequalsの実装をしていると信じて素直にequalsを呼ぶのが良いのでは。



118 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 20:52:47.85 ]
あ、ごめん、Stringの実装の話でしたか。読んでなかった。
確かにそれは変だよね。何でだろう。

119 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 21:05:48.08 ]
ほんと、バカほど長文がすきだね

120 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 21:16:06.80 ]
>>114
ハッシュ未計算のフラグにhash == 0使うのやめい。
1.7でもまだ直ってないのか

去年どこかで脆弱性レポート出たよな?
hash=0になるようなクエリばかり送りつけるDDoS攻撃が

121 名前:114 mailto:sage [2013/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 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 21:28:33.68 ]
実装としては正しくても意味的に
素直じゃないからだろ
ついでに、文字列が長くて、先頭が同じで、
最後だけ違う文字列の比較でしか役に立たない
ウンコなコードは要らない

>if (hash != 0 && other.hash != 0)
> return hash == other.hash;
しかも間違ってるし

123 名前:デフォルトの名無しさん [2013/06/15(土) 21:49:48.32 ]
爆速って試してみたってこと?それとも机上の推論?
Stringがどんな用途で使われることが多いか知らんけど

124 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 22:09:09.19 ]
机上の空論。しかもコード間違ってたし…
多くの環境では、比較命令の中でも0との比較は高速っていう印象だったんで。

確かに >122 の言う「ウンココード」を追加しなきゃいけない割には、
高速化できるシチュエーションは少ないかもしれない…。

125 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 22:25:38.88 ]
まあコンセプトとしてはいいんじゃね
ウンココードhere:
ideone.com/t4oYJq

126 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 22:40:34.97 ]
javaってほんとダメな言語だな
根本にあるコンセプトは悪くないんだが

127 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 22:41:36.41 ]
なんだいきなり
そう思った根拠ぐらいは書いた方がいいぞ



128 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 22:43:38.66 ]
>>127
スレの流れ読めばわかるが?

129 名前:デフォルトの名無しさん [2013/06/15(土) 22:44:29.02 ]
覚えたばかりの言葉は使ってみたくなるのが人の道理

俺もそのコンセプトはよく分かるわー






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<160KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef