1 名前:テンプレ(1/3) mailto:sage [2009/11/21(土) 17:58:46 ] プログラミング言語Javaに関する質問スレです。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作管理 ttp://pc11.2ch.net/hp/ Webプログラミング ttp://pc11.2ch.net/php/ をご利用下さい。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 ttp://www.wikiroom.com/java/?path,classpath ・String に == は使うな。equals() を使え。 ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 前スレッド ★★Java質問・相談スレッド133★★ pc12.2ch.net/test/read.cgi/tech/1253376151/ 次スレは>>950 あたりで。 過去ログ、関連スレッド、よくある質問とその回答など、 質問をする前に、貴方が見なければならないサイトについての情報は、 下のwikiのページにまとめてあります。 ttp://www.wikiroom.com/java/
49 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 08:53:56 ] swing のJOptionPane.showInputDialog を使って、こんな感じで、一個のテキストボックスを表示して 文字列を取得しているのですが、二個のテキストボックスを表示させて、文字列を取得することはできませんでしょうか。 private String inputDialog(String str) { String result = JOptionPane.showInputDialog( this, str, "インフォメーション", JOptionPane.INFORMATION_MESSAGE); return result; }
50 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 12:36:48 ] >>48 >>45 はきっとタダの燃料だから・・・
51 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 12:37:34 ] >>49 JOptionPane調べてもなさそう? なら自分でダイアログつくればいいじゃない
52 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 13:44:05 ] >>51 なさそうですね
53 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:14:59 ] たとえば、 final JPanel pn = new JPanel(); final JTextField tf1 = new JTextField(); final JTextField tf2 = new JTextField(); pn.add(tf1); pn.add(tf2); int res = JOptionPane.show...Dialog(null,pn,...); if(res == JOptionPane....){ final String text1 = tf1.getText(); final String text2 = tf2.getText(); } こんな感じでメッセージにコンポーネントを指定することで複数取得することはできるよ。
54 名前:デフォルトの名無しさん [2009/11/23(月) 18:28:31 ] ファイルの入出力について質問です。 a.txtの内容を b.txtにコピーしたいのですが、 以下サンプルコードの実行の仕方がわかりません。 コマンドプロンプトで C:\myjava>java WriteFile1 C:\myjava>a.txt < b.txt と記述してもエラーになります。 困っております。お願いします。 public class WriteFile1 { public static void main(String[] args){ if(args.length != 1) { System.out.println("使用法: java WriteFile1 作成ファイル"); System.out.println("例:java WriteFile1 output.txt < input.txt"); 以下略
55 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 18:42:18 ] なんでそこで改行するんだ 例にある通り C:\myjava>java WriteFile1 a.txt < b.txt ってやれ
56 名前:デフォルトの名無しさん [2009/11/23(月) 21:23:01 ] www.searchman.info/java_eclipse/1090.html >>tomcatPluginV321.zip を 解凍すると、com.sysdeo.eclipse.tomcat_3.2.1というディレクトリができます。 これを、eclipse のpluginsディレクトリに保存します。 私の場合ですと、C:\eclipse\plugins に保存します。たったそれだけです。 この設定で行ってもeclipseの設定にtomcatが表示されないのですが何故でしょうか…。
57 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 21:50:08 ] Eclipseはバージョンなに使ってんの? つーかWTPでいいじゃねーか。
58 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 23:01:40 ] 下記を実行したら81E0となります。 なぜ、こうなるのでしょうか? SunのVMで5を使っています。 byte[] b = new byte[2]; b[0] = (byte)0x87; b[1] = (byte)0x90; HexDumpEncoder dump = new HexDumpEncoder(); System.out.println(dump.encode(new String(b,"Windows-31J").getBytes("Windows-31J")));
59 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 23:12:09 ] >>58 Windows-31Jのうちいくつかの文字はUnicodeから変換するときに複数の コードポイントがあるため、そういうことが起きる。 www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=46110&forum=12
60 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 23:20:43 ] >>59 そういうことなんですか。文字コードはややこしいですね・・。 ありがとうございました。
61 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 23:22:49 ] スレがカオスってるな
62 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 23:24:48 ] パラレルGCとコンカレントGCは同じものなのでしょうか? 今、GCの時間を短くしようとしているのですが、どういうチューニングをすればよいのでしょうか。 FullGCを起こさないように、ヒープを大きくして、 ヒープ拡張時のオーバーヘッドをなくすため初期ヒープサイズと最大ヒープサイズは同じにしました。 それでも1回あたりのGCの時間が100ms位かかっており、システムのスループットに影響してます。。。
63 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 23:27:51 ] 前スレでシャローコピーとディープコピーについて質問した者です。 参考になりました。分からない事柄を調べまたひとつ勉強させていただきました。 感謝です。ありがとうございました!
64 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 23:46:53 ] 別もんだよ。 www.atmarkit.co.jp/fjava/rensai4/troublehacks02/troublehacks02_2.html ここ見れ。 平均スループットは悪化してる点に注意ね。
65 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 16:28:31 ] 1桁の数字を入力したらEnterを押さなくてもすぐ次の処理を行うようにしたいのですが どのようにすれば良いでしょうか?
66 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 16:57:09 ] 289 :デフォルトの名無しさん :2005/06/01(水) 15:27:21 javaだけではフッキングは無理だな。 JNIでAPI呼ばないと。 TextFieldなんかで定型入力させるのか? だったらリスナで十分だ。
67 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 17:33:01 ] classにpartialを付けてもエラーになるんですけど、 どうやってファイルを分けるんですか?
68 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 17:50:27 ] そんな機能ねーよ
69 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 17:57:07 ] C#じゃないんですから・・・
70 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 18:26:34 ] 不便ですね・・・
71 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 18:27:59 ] 一向に進歩のない言語だというのは実に正しい
72 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 19:57:08 ] わかりやすいからいいじゃん。
73 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 20:41:05 ] partialは良い機能だと思うが、C#のは拘束が弱くて嫌い。 ファイル名規則をClassName$Layout.javaみたいに限定して欲しい。 まあそんなのよりヒアドキュメントを用意してくれ。ラムダ式とか後でいいだろ。
74 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 20:41:12 ] C#はむしろ変えすぎ。2.0とそれ以降は、CとC++くらい違う。 LINQなんて追加するんならC##とでもしろと。
75 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 20:43:46 ] JavaユーザーとC#ユーザーって仲悪いの?
76 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 20:48:26 ] 半端なく
77 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 20:52:42 ] 俺は概ね認めているが、Nullableという不毛なクラスのせいでイマイチな評価になっている。 半端なところのパフォーマンスに拘った言語仕様だから、エスケープ解析みたいな試みにならない。
78 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 20:54:17 ] C#(win)とJava(win以外)を比べる時点で間違ってる。
79 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 21:01:39 ] C#のGUIが使いやすいのは、レイアウトマネージャを用意する必要がないからって部分が大きいしな。
80 名前:デフォルトの名無しさん [2009/11/24(火) 22:04:38 ] JAVAでテトリスを作りたいのですが、参考になりそうなHPを知ってたら教えて下さい
81 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 22:10:13 ] Javaでゲーム作りますが何か?
82 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 22:11:42 ] ttp://www.nintendo.co.jp/ds/atrj/rule/index.html
83 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 05:11:20 ] >>79 かくいう.NETも、WPFでレイアウトマネージャ取り入れてるけどな。
84 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 15:26:04 ] コレクションのinstanceofについて質問です。 Map<String, String> map; Object obj = map; if (obj instanceof Map) ↑このifは通ると思いますが、mapの型(String,String)としてinstanceofするにはどうすればいいのでしょうか? instanceof通った後に型付きでキャストすれば動きそうですが、 型チェック不足でwarningが出てしまいます。
85 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 19:12:39 ] 実行時の段階では元の型パラメータを取り出すことはできません。 instanceofのような動的型チェックには、型パラメータを含めることはできません。
86 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 19:35:44 ] リフレクションで取ってifじゃだめ?
87 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 20:02:49 ] swing のボタンをグレイアウトし操作無効にするメソッドを教えてください
88 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 20:05:29 ] >>87 setEnabled
89 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 20:44:52 ] >>88 thx
90 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 22:16:24 ] JAVA、プログラミング初心者のものです 分け合ってclassファイルの逆コンパイルし中身を見たいのですが ぐぐっても解決策を見出すことができません そこで質問させてください ぐぐると 『 eclipseとjadclipseをインストールして、jadのパスをeclipseに通して、 File>OpenFileで、開こうとしたらエラーメッセージが出たので、 根本的に間違ってたのかなと。 jadの使いかた調べてみます。 Could not open the editor: The Class File Viewer cannot handle the given input ('org.eclipse.ui.ide.FileStoreEditorInput'). >jad -s xxxx.class output.jadで見ることができました。 』 上記のようなことが検索されました 私も 上記のように 『Could not open the editor: The Class File Viewer cannot handle the given input ('org.eclipse.ui.ide.FileStoreEditorInput'). 』 というエラーが出ます しかし 『>jad -s xxxx.class output.jadで見ることができました。』 上記の意味が理解できずに解決できないでいます なにとぞご指示・ご指導のほどよろしくお願いします 参考にしたサイト ttp://hpcgi2.nifty.com/a-yama/wiki.cgi?Eclipse%2FPlugin ttp://www.atmarkit.co.jp/fjava/javatips/073eclipse025.html
91 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 22:21:00 ] java.decompiler.free.fr/?q=jdgui このデコンパイラがおすすめ。 eclipseプラグインもあるよ。
92 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 22:44:05 ] >>91 ありがとうごさいます あんなに苦労したことがこんな簡単にできるとは思いませんでした ほんとに助かりました。
93 名前:デフォルトの名無しさん [2009/11/26(木) 03:11:57 ] 与えられた文字列がディレクトリを指すかどうかをテストしようとして new File(s).isDirectory() を使ってたんですが、 Windows 上で s が \\server\share の形になっていると数秒の待ち時間が発生してしまうことがわかりました。 ネットワークにサーバー名とか(?)の問い合わせをしているようです。 また、一時的にサーバーが利用できないときに false になってしまうのも望ましく ありません。 これを回避するため、任意の文字列がファイルやディレクトリを指しうるものかどうか、 文字列の解析だけで(ファイルシステムやネットワークへのアクセス無しで)判別する 方法を探しているのですが、標準のクラス内に使えるものはないでしょうか? 例えば Windows ならパス文字列に含まれない文字がいくつかあるので、それが 含まれているかどうかだけをテストする、とかいうやつです。はじめは File のメソッドに isValid() とかあるだろうと思ったのですが、見当たりませんでした。
94 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 05:45:13 ] JavaってJITコンパイルという方式のようですが、逆に言うとソースコードを見られてしまうという事ですか?
95 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 06:17:09 ] yes >>91
96 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 07:03:41 ] なるほど、ありがとうございます
97 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 09:48:32 ] >>93 > 標準のクラス内に使えるものはないでしょうか? ない。
98 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 10:22:21 ] Jadはtry-catch-finallyがあって,なおかつ内部でモニタの開放とかしてると全く逆コンパイルに失敗して涙目
99 名前:デフォルトの名無しさん [2009/11/26(木) 19:46:41 ] J2SE 1.6で、java.lang.management.OperatingSystemMXBeanからいくつかのメソッドが削除されたのはどうしてでしょう? また、他のオブジェクトで代替/回避する方法はありますか? getTotalPhysicalMemorySizeやgetFreePhysicalMemorySizeが使えなくなっていたのは少々困りました。 現在、リフレクションを使って無理やり取得していますが、1.5で実装されたモノが1.6で削除(非推奨ではなく)されたのは、何か大きな不具合があった為でしょうか?
100 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 20:31:44 ] >>99 java.lang.management.OperatingSystemMXBean にはそんなメソッドないぞ。 com.sun.management.OperatingSystemMXBean と混同しとるんじゃないか?
101 名前:99 mailto:sage [2009/11/26(木) 22:49:43 ] >>100 ・・・申し訳ありませんでした、大当たりです。 com.sun.management.OperatingSystemMXBeanは(Eclipseでは)ビルド・パスの設定で明示的に許可してやらないと見れないので、取り違えてしまったようです・・・。 バカな質問にすばやくお答えいただき、ありがとうございました。
102 名前:デフォルトの名無しさん [2009/11/27(金) 00:18:06 ] 今からjavaやろうと思ったら 普通に1.6でいいんですよね? これはいい。これはやめとけみたいなのありますか?
103 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 00:35:04 ] GUIについて質問です マウスイベントを用いて何度か図形(drawLineやOval)を描画する プログラムを作ってるんですが、新たに図形を描画させると 以前描画した図形が消えてしまいます。 super.paint(g)をソースから消すと以前描画した図形も残るんですが 処理速度がものすごく遅くなります・・・ ちなみに引数(g)ってのは public void paint(Graphics g) のgです 処理速度が遅くならずに以前描画した図形を残せる方法はありませんか?
104 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 13:05:38 ] >>103 再描画してんじゃないの? ソースがないからなんともいえんが
105 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 13:31:18 ] >>102 6.0とも言う
106 名前:103 mailto:sage [2009/11/27(金) 13:32:09 ] すみません解決しました・・・ >>104 さんのおっしゃる通り再描画していました なのでpaintメソッドと別にupdateメソッドを作り public void update(Graphics g) { paint(g); } というふうに直接paintメソッドを呼び出したら上手くいきまいした
107 名前:デフォルトの名無しさん [2009/11/27(金) 20:30:30 ] 質問です。以下のホニャララの部分を、"点aは(x,y)"および"点bは(x,y)"と、 インスタンス名と同じ名前になるように表示させたいのです。 初心者の質問で申し訳ないのですが、何か良い案を教えてください。 class Point2D{ double x; double y; Point2D(double x,double y){ System.out.println("点ホニャララは(" + x + "," + y + ")" ); } } class Test{ public static void main(String[]args){ Point2D a = new Point2D(Double.parseDouble(args[0]),Double.parseDouble(args[1])); Point2D b = new Point2D(Double.parseDouble(args[2]),Double.parseDouble(args[3])); } }
108 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 20:47:10 ] >>107 これは初心者ってか素人のレベルだな
109 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 22:19:59 ] >>107 そもそもインスタンスに名前なんてないよ ソースコード上の「a」とか「b」ってのはインスタンスの名前じゃないよ 名前を教えなきゃいけない
110 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 23:18:13 ] >>108 残念なコを見るような目で見ながら教えていただけると助かります。 >>109 書き方が悪かったようです。それは理解しています。 僕の頭では、("点" + k + "は(" + x + "," + y + ")" );/*kはString型*/ として、条件文を用いてaとbを区別するか、引数を用いるかしか考え付きませんでした。 書き忘れましたが、課題の一部(質問した部分が課題なわけではない)です。 メッソドの形が指定されているので、引数は利用できません。 となると、条件文にしようと考えたわけです。 例えばif(){k="a";}if(){k="b";}とするわけですが、()の中身が思いつきません。 int n=0;n++;としてn==1 or n==2で判別しようとしたり、条件にメソッドを使用しようとしたり、 色々考えましたが、できませんでした。 素人の為知識量が不足しています。 条件文を用いる他に、スマートな方法がありそうですし。 何か、ご助言くださればありがたいです。
111 名前:デフォルトの名無しさん [2009/11/27(金) 23:26:31 ] >>110 お前、態度でかいぞ トーシロの無能が何言ってんだ
112 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 23:40:04 ] フィールド(メンバ変数)は名前を持つが、 パラメータ(引数)やローカル変数は名前を持たない。
113 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 23:51:22 ] 「点ホニャララは」の部分はmain側で表示してから Point2Dのコンストラクタを呼び出す。
114 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 00:04:34 ] >>110 後出しこわい > メッソドの形が指定されているので、引数は利用できません。 なんで? どうしてもシグネチャを変更できないのなら,そもそもコンストラクタで名前を表示しようなんて考えてはいけない. ソースいじくれるようだし,コンストラクタ増やしたら?
115 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 00:06:20 ] >>111 丁寧に書こうとしたら、こんなんになってしまいました。 不快にさせてごめんなさい。 >>112 助言ありがとうございます。 >>113 !?。それだ・・・!!! 正直、目から鱗です。 素人な質問に答えていただきありがとうございました! 助かりました。
116 名前:107 mailto:sage [2009/11/28(土) 00:12:29 ] >>114 >どうしてもシグネチャを変更できないのなら,そもそもコンストラクタで名前を表示しようなんて考えてはいけない. なるほど。参考になります。 >>113 とともに、コンストラクタを増やすことでも解決できますね。 自分の馬鹿さ加減がイヤになります。 お答えいただきありがとうございました。
117 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 00:32:44 ] showInputDialog でパスワード入力時に、入力文字を*****となるテキストフィールドを使いたいのですが どのようにしたらできますか?
118 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 01:23:23 ] というか大抵のケースでコンストラクタにパラメータ付ける場合は パラメータなしでnewされたくない =パラメータは意味のあるものだから必須 =メンバ変数に格納 とかじゃねーの そうでないならコンストラクタなんてパラメータ付けずに setterで外からはめさせりゃいいじゃん
119 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 01:39:33 ] マスをクリックした時に一回、勝敗が決まった時に3回 対戦者のテーマ音を鳴らす三目並べゲームを作ってるんですが Xが勝った時にテーマ音が鳴りません 以下は自分で作ったプログラムです www.dotup.org/uploda/www.dotup.org401130.java.html どうしてXのときだけ鳴らないか気付いた方はご教授おねがいします
120 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 01:49:32 ] まずクラス化したらどうだい? Playerクラスに纏めてしまえば変なswitch文にまどわされる事はない。
121 名前:119 mailto:sage [2009/11/28(土) 03:25:54 ] すみません、再生する音楽ファイルを変更したら解決しました おそらく、再生時間が極端に短いとloop再生できないようです・・・
122 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 10:31:27 ] >>117 ですが お願いします。
123 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 11:46:51 ] >>117 このあたりが参考になるのでは ttp://java.sun.com/docs/books/tutorial/uiswing/components/passwordfield.html
124 名前:デフォルトの名無しさん [2009/11/28(土) 11:59:12 ] JAVAで関数ポピンタみたいなことをやるには どうすりゃいいの。
125 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 12:01:10 ] 関数ポピンタってなんですか?
126 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 12:12:33 ] アイアムザパニーズなんですけどもザバで風呂釜を綺麗にするには?
127 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 12:13:41 ] いわゆるショッピング症候群です
128 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 12:14:34 ] ヌルポピンタ
129 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 14:53:57 ] >>123 Thx
130 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 16:36:21 ] >>124 動的にいろいろな関数のボピンタを渡す代わりに、動的にいろいろなオブジェクトを渡して、 それらのオブジェクトが共通に実装しているメソッドを呼ばせる。
131 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 18:47:21 ] ポピンタが使えるようになったら初心者卒業だね!
132 名前:デフォルトの名無しさん [2009/11/29(日) 05:59:57 ] java seが普通のjavaで java eeがjspやサーブレットまで含めたjavaということでしょうか?
133 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 12:18:39 ] そんなところ
134 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 14:06:18 ] ポピンタがなんだかわからなかったから、ググってみたらgoogle先生が教えてくれたww
135 名前:デフォルトの名無しさん [2009/11/29(日) 14:47:45 ] クラス、継承、オーバーライドまでは使えそうですが、 ポリモーフィズム、抽象クラス、インタフェースとかになってくると もう使いこなせる気がしません。 どういうものか理解はできていますが、自分でいつ使えばいいのか 判断が難しそうです。 皆さんはどうやって使えるようになりましたか? 使わなくても問題ないでしょうか?
136 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 14:52:58 ] 俺は最近 インターフェイス=コールバック用 抽象クラス=計算戦略の概略の形を作る用 になってきた
137 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 15:20:15 ] 使っているうちにわかってくると思えばいいんでしょうかね。 前にC++をしばらくいじってみたとき、結局最初から最後までOOPらしいものはできませんでした。。
138 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 16:00:36 ] >>135 インターフェース⇒使う側は「×××という機能(メソッド)が使える」ということだけわかっていればいい。中身は気にしない。 継承関係からは独立しているので、インターフェースを実装したクラスは中で何をやっていてもいい。 ファイルに書き込む代わりにネットワーク越しでサーバにアップロードするとか。 抽象クラス⇒処理の流れの大枠は決まっているが、一部の処理だけ使う側にまかせたい。その部分は使う側が決めなければならないので、抽象クラス自身は単独では完結していない。 ポリモフィズム⇒使う側は一律、writer.write(data)みたいに書くが、このとき実際に書き込む先はファイルだったりメモリだったりDBだったりどっかのサーバだったり。 要は、呼び出し側がif〜else if〜elseやswitch〜caseで切り替えるんじゃなくて、呼び出される側が同じシグネチャのメソッドを実装した中身の違うクラスを用意する。 なるべくをif文やswitch文を書きたくないので、無いと生きて行けない。
139 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 16:05:14 ] >>135 インタフェース=ポリモルフィズムのための規格 抽象クラス=雛形
140 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 16:10:15 ] >>138-139 うーん、難しいですね…。 違う本も読んでもっと勉強してみます。 抽象クラス、インタフェースの意味・目的はさておき、どのように身に付けましたか?
141 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 17:05:12 ] 標準のコレクションクラスをひととおり眺める それらを具象クラス (ArrayList, LinkedList) ではなくインタフェース (List) で使ってみる
142 名前:デフォルトの名無しさん [2009/11/29(日) 18:17:37 ] 同じ内容のオブジェクトのハッシュコードは等しいが 異なる内容のオブジェクトのハッシュコードは必ずしも違う値になるわけでは ないと聞いたのですが、ハッシュコードってどのような場面で使用されるのですか?
143 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:21:19 ] >>142 例えばjava.util.HashMapの内部で使用されてる
144 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:22:58 ] Hashtableとか ハッシュ値はクラスの設計者がどんな値使うか決めていい 必要であれば全部同じ値を返してもいい
145 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:10:26 ] よく指摘される事項ではあるけど、 equalsをオーバーライドしたクラスは必ずhashcodeもオーバーライド必須ね。 これ忘れて潜在的なバグが放置されてる業務プロジェクトは星の数ほど存在する。
146 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:14:27 ] 仕様です。
147 名前:デフォルトの名無しさん [2009/11/29(日) 19:22:07 ] >>143-145 ありがとうございます。 HashMapの実装の仕方を見たことは無いのですが getしたとき内部では高速化のためhashcode毎に分けられており 最終的にkey紐づくものを返すというイメージなのですか?
148 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:42:49 ] そうだね。 ハッシュマップは↓のようなデータ構造のイメージ hash1 : {key1:val1, key4:val4, key6:val6} hash2 : {key2:val2, key3:val3, key5:val5} hash3 : {key7:val7} key3でgetした場合、まずkey3のhashcodeであるhash2でgetして、 取得されたサイズ3のコレクションに対して、key3とのequalsが実行される。 最悪7回equalsが必要(size7のMapだから)なところ、 HashMapの実装であれば3回のequalsですんでいる。 実際には値がより均等に分散するアルゴリズムでhashcodeが計算されるため、 よほどHashMapのサイズが大きくならない限り 同じhashcodeにぶら下がるオブジェクトは多くて1個で収まる。→ 超速い
149 名前:デフォルトの名無しさん [2009/11/29(日) 20:25:55 ] >>148 解説ありがとうございます。 理解できました。