- 1 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 15:21:29 ]
- 過去ログ、関連スレッド、よくある質問とその回答、
質問をする前に、貴方が見なければならないサイトについての情報は、 下のwikiのページにまとめてあります。 www.wikiroom.com/java/ これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、 wikiからのリンクをおたどりください。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 www.wikiroom.com/java/?path,classpath ・String に == は使うな。equals() を使え。 ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 前スレッド 【初心者】Java質問・相談スレッド101【大歓迎】 pc11.2ch.net/test/read.cgi/tech/1177938653/ /* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。 質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */ また、当スレで質問をするかたは、回答をもらえたときに、 wikiの更新をして頂ければ、忝なく存じます。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作板をご利用ください。pc10.2ch.net/hp/ 次スレは>>980あたりで。
- 560 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 20:25:41 ]
- )553
置いてます。 >554 マッピングですか…。 xmlはよくわからないんですけど調べてみます。
- 561 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 21:52:57 ]
- jarのアプリから同階層のファイルのパスが取得できずに困っています。
apl │ readme.txt │ └─work.jar test.class このようなJarアプリの構成の場合、readme.txtはwork.jarと同じ階層なので ./readme.txtと指定すれば良いと思ったのですが、読みにいけません。 test.classから見た場合を考え ../../readme.txtとしましたが、やはり読みにいけません。 System.getProperty("user.dir")を使用すればよいだけなのですが なぜファイルが見つけられないのか困っています。 どなたか教えてください。
- 562 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 22:19:15 ]
- "readme.txt"
- 563 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 23:37:16 ]
- >>561
設定次第だけど、多分ソレは見えない。 アプリから読みたい場合、jarを自分で作っているならば、jarのルート(デフォルトパッケージ)の所にreadme.txtを置いてjarにする。 Webから読みたいならば、readme.txtをjspとか置いてある公開されているディレクトリに配置しなきゃダメ。
- 564 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 23:37:25 ]
- 文字セットをMS932に指定して出力をしたいのですが、やり方がいまいちわかりません。
少しは考えて以下のソースになったのですが、ダメです。 もっと複雑な手順が必要でしょうか? while (true) { int c = stream.read(); if (c == -1) { stream.close(); break; } byte b =(byte)c; String s = String(b,"MS932"); System.out.print(s); }
- 565 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 00:15:40 ]
- >>564
バイトで読み込んで文字コードを変換したいってこと? File file = new File("text.txt"); FileInputStream input = new FileInputStream(file); byte[] bytes = new byte[file.length]; input.read(bytes); String string = new String(bytes); コンパイラは通してないけど、こんな感じ。 文字コードはデフォルトでないならば、Stringのコンストラクタを調べて変換かけてくれ。
- 566 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 00:16:07 ]
- Javaランタイムについて質問なんですが、"J2SE Runtime Environment 5.0 Updata 6"みたいなのはプログラムの追加と削除から消していいんでしょうか。
- 567 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 00:18:22 ]
- >>566
オタクの環境で必要かどうかなんて、知らんがな。 他にどんなソフト入っているかとかによるから答えようがない。
- 568 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 00:34:10 ]
- なんかテキストファイルを隔行で読み込んでしまうんだが、なぜ?
Arraylistに歯抜けになって格納される・・・ public ArrayList readfile(String path){ ArrayList<String> list = new ArrayList<String>(); try{ BufferedReader br = new BufferedReader(new FileReader(path)); while (br.readLine() != null){ list.add(br.readLine()); } }catch(IOException e){ e.printStackTrace(); } return list; }
- 569 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 00:37:14 ]
- >>568
while (true){ String line = br.readLine(); if(line == null) break; list.add(line); }
- 570 名前:568 mailto:sage [2007/06/17(日) 00:38:59 ]
- index指定していなかったorz
- 571 名前:デフォルトの名無しさん [2007/06/17(日) 00:50:24 ]
- Javaのjava.net.URLを使用して、Webサイトの情報を集めるプログラムを
作成したのですが、WindowsとLinuxで速度が異様に異なります。 プログラムはこんな感じのものです。 ※関連ありそうな部分だけ抜き出しています while(継続条件){ URL stockURL = new URL("http://アドレス"); in = new BufferedReader(new InputStreamReader(stockURL.openStream(),"EUC_JP")); while ((line = in.readLine()) != null) { //処理 } in.close(); } このようなイメージのプログラムをスレッドで100個同時起動しているのですが、 Windowsだと2時間くらいで終わる処理がLinuxで実行すると1時間で5%くらいしか 完了していませんでした。 Linuxのシステムモニタを見ると、通信がある程度行われると全く行われない 状態が数分続き、その後にまた通信しているようなイメージに見えました。 ※通信していない間はCPU使用率も落ちる。 Linuxのシステムモニタとログを出力した際にURLオブジェクト生成のあたりで 止まっていたりするので、通信系だと思うのですが何か原因がわかる方いましたら ご教示願えませんでしょうか。 プログラムよりもLinuxの設定なのかもしれませんが・・・。 よろしくお願いします
- 572 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 00:58:18 ]
- >>571
Linuxはあまり詳しくないけど、どのLinuxを使っているかは書くべきじゃないか? テストコードとして単純なソケットをつないで見るのはいかがだろうか? String[] address = 略 while(int i = 0; i < 100; i++){ Thread thread = new Thread() { public void run() { Socket socket = new Socket(address[i], 80); System.out.println("Connect!"); Thread.sleep(1000); socket.close(); } }; thread.start(); } 1秒置きにしかConnectできないとなれば、ソケット通信自体に制限がかかっているとしか考えにくいかな。
- 573 名前:568 mailto:sage [2007/06/17(日) 01:17:44 ]
- >>569
解決しました! ありがとう。 でも同じような処理なのになんでだろ・・・
- 574 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 01:22:38 ]
- >>568
ヒント: br.readLine() の呼び出し回数
- 575 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 02:32:02 ]
- TOMCATとMysqlを連動させようとしてます。
ちゃんと\libにもmysql-connector置いて環境変数も通ってるはずなんだけど、 Error at SQL connectionになります。 プログラム自体は間違ってないはずなんだけど、かれこれ数時間格闘してます。 TOMCATも他の簡単なものでは動いてます。 わかる方いたら教えてください。
- 576 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 08:35:02 ]
- >>575
設定が間違っているだけだろう。 Tomcat、MySQL、OSなどの各バージョン、それからTomcatとMySQLは同じマシンなのか違うマシンなのか・・・など まず、全ての環境を書け、アホ 1. 単純なJDBCの接続はできるか? 2. Tomcatの管理コンソールからは?
- 577 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 10:44:43 ]
- Javaでドロップレット(アイコンにファイルをドラッグ&ドロップして作業させる)を作ることはできますか?
もし参考になるサイトをご存知でしたら教えていただけませんか? よろしくお願いします。
- 578 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 11:44:58 ]
- 先週からservletによる課題作成を始めたのですが、
public void doGet(HttpServletRequest req, HttpServletResponse res)〜 といったメソッドを使い、JSPへ変数の値を受け渡すことは出来たのですが、 画面遷移時にreqとresの値を初期化していない、という指摘を受けました。 ServletConfigなどを調べ、初期処理メソッドを作り、super.init(conf); といった感じで書いてみたのですが、System.out.printlnで調べてみると、 reqもresも全く初期化されていませんでした。 req == null; のようにするとエラーが起きてしまいますし、 どうすれば初期化出来るのか、どのメソッドが正解なのか分かっていません。 何かしらヒントを頂ければと思います。宜しく御願いします。
- 579 名前:575 mailto:sage [2007/06/17(日) 11:45:11 ]
- >576
すいません。 環境は OS XP HOME TOMCAT5.0.28 Mysql4.1 j2sdk1.5.0_02 mysql connector/J 3.1.7 でTOMCATもMysqlも同じマシンです。 単純な接続もできず、 コンソールのユーザーデータソースは1つもない状態です。 web.xmlの設定や、server.xmlの設定が調べていてもよくわかりません。 多分Mysqlのパスがうまくいってないんだろうとは思うけど…。
- 580 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 11:52:44 ]
- >>579
どういう例外が発生したのか、手を抜かずに書こう。 スタックトレースは長いが全文書くくらいのつもりで。 JDBCデータソースを使ってるとしたら、 Tomcatは4.x系と5.0系と5.5系で設定方法が違うので、気をつけて。5.0系はこれを参照 ttp://tomcat.apache.org/tomcat-5.0-doc/jndi-datasource-examples-howto.html 使ってないとしたら、JDBCドライバの置き場所かURLの間違いだろう。 どっちにしろ、スタックトレースがないので判断のしようがない。
- 581 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 13:04:18 ]
- >>577
start "" "対象jarのパス" %1 というバッチファイルを書いてそれに対してエクスプローラからファイルをドロップすれば mainのargs[0]でファイルパスが取得できるよ もっといい方法もありそうな気はするけど
- 582 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 16:07:17 ]
- Java で Windows の service は作れますか?
コントロールパネルのサービスから起動・停止コントロール出来ますか?
- 583 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 16:12:12 ]
- できたらすごいよね
- 584 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 17:06:12 ]
- デーモンというかクライアントに機能をサービスするだけなら出来る。
いわゆるサービスにするためにはサービスマネージメントAPIを実装 する必要があるからJNIでも使うしかないんじゃないかな。 汎用的なサービス化ツールも無い訳じゃないけどね。
- 585 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 17:27:43 ]
- それなら初めからCで書けば良いじゃないか
- 586 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 18:23:11 ]
- 回答いただいたみなさんありがとうございます
質問の仕方が悪かったので仕方ないのですが もう Java で単独で動くところまで出来上がってて それを Windows 上でサービスにしてインストール 出来たらいいなと思って質問しました bat ファイルでも作って起動時に実行でもいいんですけど もう少しスマートな方法は無いかな・・・と
- 587 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 19:12:03 ]
- Cでラッパー書けばよくね?
- 588 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 19:14:43 ]
- それなら初めからCで書けば良いじゃないか
- 589 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 19:15:55 ]
- よくよめ。もうJavaで出来ちゃってんだよボケ
- 590 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 19:26:22 ]
- じゃぁ漏れがサービス化ラッピング用の
AbstructInteface創ってやるから お待ちください
- 591 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 20:04:51 ]
- System.out.println("Format:"+channel.getFormat().toString());
channel.getFormat().toString() こんなにドットが続く意味が分かりません。 printlnでメソッドを引数に出来るのですか? 初歩の質問ですいません。
- 592 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 20:19:46 ]
- printlnが引数にとっているのはメソッドではなくメソッドを評価した値です
- 593 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 20:27:39 ]
- >>591
System.out.println("Format:"+channel.getFormat().toString()); ↓ String str = "Format:"+channel.getFormat().toString(); System.out.println(str);
- 594 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 20:34:50 ]
- >>591
>>592 なるほど。やっと意味が分かった気がします。 返信ありがとうございます。 channnel.getFormat().toString() という記述は、channnelというオブジェクトに対してgetFormatというメソッドの中のtoStringというメソッドを使って、それを評価した値がstrに格納されるということでしょうか? なんか変な解釈をしてそうですが。
- 595 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 20:36:09 ]
- ちがいます
どうみても変な解釈です 本当にありがとうございました
- 596 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 20:39:19 ]
- >>595
ですよね。 getFormat()とtoString()の間を結ぶドットの意味が分からないというのが問題点です。 どう見ても勉強不足です。 本当にアリガトウございました。
- 597 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 20:43:34 ]
- >>582-590
www.syuhitu.org/other/javasvc.html
- 598 名前:デフォルトの名無しさん [2007/06/17(日) 20:48:13 ]
- 人にjarファイルを配布する際、
swtって外部DLLとか持ってこないといけないっぽいけど、 swingだと何も用意しなくていいの?
- 599 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 20:51:54 ]
- >>598
SWTも月末に出るver3.3だと外部dllは必要ない。
- 600 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 20:54:36 ]
- >>596
channnel.getFormat().toString()は、 Object obj = channnel.getFormat(); obj.toString(); とおんなじ
- 601 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 20:59:31 ]
- >>600
今度こそ本気で分かりました。 toStringの意味が分かってなかったのが原因だったようです。 ご丁寧にも返信くれた方ありがとうございました!
- 602 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 21:47:53 ]
- >>586
Microsoft Java Language Conversion AssistantでC#に変換しちゃえ
- 603 名前:598 mailto:sage [2007/06/17(日) 23:05:40 ]
- >598
うわマジサンクス 諦めてswingで画面作り直してたけど、SWTでもなしでいけるようになるのか…
- 604 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 23:59:31 ]
- informaってインストールはどうすればいいのでしょうか?
サイトからダウンロードはしたのですが……
- 605 名前:デフォルトの名無しさん [2007/06/18(月) 00:49:10 ]
- packageとimportの意味が調べてもよく分かりません。教えてください。
- 606 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 01:50:43 ]
- 調べて分からない人間に教えて分かるとは思えない
- 607 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 03:14:11 ]
-
public class GuessServlet extends HttpServlet{ public void doGet( HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException{ response.setContentType("text/plain; charset=Windows-31J"); これのresponse.setContentTypeというのは、サーバーからクライアントに送られる文字の エンコードにだけ関与しているということでしょうか?
- 608 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 04:17:22 ]
- 何でそう思ったのか書け
- 609 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 08:07:43 ]
- >605 簡単に説明。extendsは別のクラスにあるメソッドを使うための儀式みたいな物。
packageはプロジェクトが大規模になるとファイルが散乱して美しくない&再利用しにくい ということでフォルダーを作ってその中にファイルを入れてしまおうというシステム
- 610 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 08:10:19 ]
- みすった^^;extendsじゃなくてimportな。
- 611 名前:577 mailto:sage [2007/06/18(月) 10:15:30 ]
- >>581
ありがとうございます でも自分にはまだ難しくて解りません(´・ω・`)
- 612 名前:デフォルトの名無しさん [2007/06/18(月) 19:37:02 ]
- swingで自前でダイアログ作るのってどうすればいいのでしょうか・・・?
dialog.show();を使ったら推奨されないとか言われてeclipseにおこられてしまいました・・・。
- 613 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 19:50:11 ]
- >>612
java.sun.com/javase/ja/6/docs/ja/api/java/awt/Window.html#show() > 推奨されていません。 JDK version 1.5 以降は、 setVisible(boolean) に置き換えられました。
- 614 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 20:48:27 ]
- >>575
うちではできてる
- 615 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 22:04:24 ]
- RMIのリモートオブジェクトなのですが、
ttp://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/rmi/spec/rmi-arch3.html のように、リモートオブジェクトのスレッドは保証されていないとあります。 これを固定する方法はあるのでしょうか? サーブレットのシングルスレッドモデルのようなイメージです。 性能面等はとりあえず差し置いて構わないのですが。 カスタムソケットファクトリあたりがそうなのかなあと思ったのですが 使い方がよく分かりませんでした…
- 616 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 22:10:50 ]
- >>615
RMIは単なる中継に使って、別プロセスで本体を上げていてはどうか? RMIのシグネチャの中にスレッドを特定するキーを持たせておいて RMIの機能は単なるディスパッチャ。 やりたいことが何かわからんのでこれくらいしか・・・
- 617 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 23:10:24 ]
- >>615
まんま、簡易Servletでも作成してしまえばいいと思われ。 イベントのディスパッチスレッドがリクエスト毎にスレッド立ち上げればいいでしょう。
- 618 名前:デフォルトの名無しさん [2007/06/18(月) 23:51:43 ]
- ファンクションキーでタブやフレームをきりかえれるような処理ってできますか?
F2を押したら現在のフレームを閉じて新しいフレームを開く みたいな
- 619 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 00:11:51 ]
- >>618
ヒント: java.awt.Event
- 620 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 01:03:59 ]
- Wikipediaを読んでいたら「Javaでは意図せずオーバーライドしてしまう問題がある」というような記事が
書かれていたんですが、この問題はいつごろから指摘されたものなんでしょう? 言語設計時にすでにわかっていたんでしょうか?それとも後から見つかったものでしょうか?
- 621 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 01:14:12 ]
- >>620
意図しないオーバーライドはあまり問題になることはない。 問題になるのはオーバーライドしたつもりがしてなかったケース。 この対策としてjava 5から@override が追加になった。
- 622 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 01:22:14 ]
- >>621
実際はそうなんですか。 「してるつもりがしてなかった」ってのは気をつければ防げますけど 「するつもりがないのにしていた」のはいくら気をつけても防げないので問題が大きそうに感じたんですが。 てことは設計時に気づいてたけど問題が小さいので気にしなかったって感じなんですかね?
- 623 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 01:26:10 ]
- Javaに限ったことではないんじゃねーか?
オーバーライドをサポートするすべての言語で起こりうる問題だとおもわれ。
- 624 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 01:26:33 ]
- >>620
意図しないオーバーライドが問題になるケースって具体的にどんなん? オーバーライド失敗には、メソッド名のスペルミスとかあるけど。
- 625 名前:620 mailto:sage [2007/06/19(火) 01:41:47 ]
- >>623
例えばC#だとoverrideの指定が必須らしいんでそういうのは起こらないそうです >>624 本来呼ばれるはずのないタイミングで呼ばれる可能性があるのでは?
- 626 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 01:53:19 ]
- 質問。
tとhに値を入れてその計算の結果に基づいて、いくつかの言葉から 1つを表示するには(例えば、暑い、寒い)どうすればいいですか? 今は結果以外のも表示されてしまっています
- 627 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 01:58:43 ]
- >>626
もう少し常人にわかるように質問してくれ
- 628 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 02:06:38 ]
- 例えばt=15 h=12
t+h<25なら 暑い t+h<10なら 寒い 今回は27なので暑い と表示させたいのに寒いも表示されてしまう
- 629 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 02:14:53 ]
- 暑い=0、寒い=1なら対象の数を2で割れば余りが0か1になるからそれで表示できる。
こんな感じ?
- 630 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 02:21:22 ]
- 計算結果を使って表記したいんですよ
- 631 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 02:26:47 ]
- >>630
計算結果ってどういう根拠の計算をするんだよ。適当でいいのかw (t + h) % 2 とか
- 632 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 02:33:29 ]
- 例えば
tが湿度 kが温度 不快指数を出す 結果から 暑いとか寒いとか表示させる
- 633 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 02:35:47 ]
- じゃそうすればいいじゃん。
わからんから、>>628の例で行けば 例えばt=15 h=12 t+h<10なら 寒い そうでないなら 暑い
- 634 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 02:39:27 ]
- 暑いとか表示させたい種類が6つ
- 635 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 02:48:30 ]
- なんとなくわかった。 else if の使い方がわからなかったって話か。
中学生は早く寝なさいね www.hellohiro.com/basic/ifelse.htm
- 636 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 02:50:11 ]
- else ifって言えばよかったんだ。失敗した
一応言うけど中学生じゃないよ
- 637 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 03:59:45 ]
- >>625
>本来呼ばれるはずのないタイミングで呼ばれる可能性があるのでは? それオーバーロードじゃね?
- 638 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 04:33:11 ]
- いやオーバーライドでしょ
意図せず呼ばれるっていう例じゃないけどこういう時問題になりそう Hogeを継承したSpecialHogeがあってSpecialHogeのほうに状態の正当性を表明する AssertValidメソッドがあったとする それとは無関係にあとからHogeのほうにAssertValidメソッドが追加されたとする するとSpecialHogeのAssertValidはあとから追加されたHogeの同名メソッドをオーバーライドしてしまって HogeのAssertValidが呼ばれなくなってしまう みたいな。
- 639 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 07:34:29 ]
- スーパークラスのメソッドも確認せずに継承して意図しないオーバーライドってどんだけ間抜けな奴なんだ
- 640 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 08:06:04 ]
- >>625
いや、C# のoverride指定が必須で問題が起こらないってんなら、 Javaでもオーバーライド禁止したいなら メソッドに final指定しときゃ良いんだから問題は起こらないと言える。
- 641 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 08:11:02 ]
- >>639
スーパークラス側で後からメソッド追加したらたまたまサブクラス側に同じシグネーチャの メソッドが既にあったっつーことでわ?
- 642 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 08:11:40 ]
- >>640
釣りか? オーバーライドを禁止してどうする。
- 643 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 08:16:27 ]
- >>642
オーバーライドを禁止すりゃ「意図しないオーバーライド」は起きない。至極当然の話。
- 644 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 08:19:01 ]
- クラス A でオーバーライドするためには final を削除する必要がある。
しかし、その状態ではクラス B でその関数を意図せずにオーバーライドする可能性がある。
- 645 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 08:22:26 ]
- >>644
上段は「オーバーライドされたくないメソッド」を「意図してオーバーライドしたい」ケースだから別の問題。 下段は意味がわからん。
- 646 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 08:31:45 ]
- >>638
とはいっても現実にそーゆー問題が多発しているかというと??? >>624 が言うようなスペルミスはかなり多発してるけど。
- 647 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 08:45:47 ]
- >>645
「意図してオーバーライドしたい」メソッドは final にできないが、 そのメソッドはいくらでも「意図しないオーバーライド」が出来てしまう、ということだ。
- 648 名前:デフォルトの名無しさん [2007/06/19(火) 08:51:54 ]
- >>647
finalがつかないなら、親クラスはオーバーライドされても良いと意思表示してる。 非finalなら子クラスが知らないうちに「意図しないオーバーライド」する可能性はあるものの、 オーバーライドしたら、いまどきのIDEなら表示してくれるので危険性はかなり低い。
- 649 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 09:01:15 ]
- >>638
でもそれ実際には問題になりにくいよな。 HogeのAssertValidが状態の正当性を表明するものなら 状態の正当性を表明するSpecialHogeのAssertValidに上書きさたからといって 問題になるのは考えにくいわけで。 状態の正当性を表明以外でAssertValidって名前にするのも考えにくいし……
- 650 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 09:29:23 ]
- C#の場合は非virtualのメソッドや隠蔽を盛り込んでしまったんで、
あの辺を厳密にせざるを得なかったのだと思う。 javaの場合は現状のままで混乱もない。単なる言語の設計思想の差だ。
- 651 名前:616 mailto:sage [2007/06/19(火) 10:21:50 ]
- >>616-617
遅くなりましたがありがとうございます。 自分も大体同じ案を考えたのですがそれが普通か分からず、 RMIオブジェクトの生成あたりをカスタマイズする方法が もしかしたらあるのかも、と思い質問させて頂いていました。 まずはその線で行ってみます。
- 652 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 10:29:11 ]
- >>648
override があればその危険性を排除できる。 final によるコントロールは override の代替にはならんよ、ということ。
- 653 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 10:55:31 ]
- 素直に言語仕様が甘かったと認めればいいのに
C#よりJavaの方が先発だから仕方ない
- 654 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 11:04:42 ]
- 甘かったというよりは後発がより優れているのは当然。
後発で先発と同じ失敗をしたらたたかれるだろw
- 655 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 11:21:57 ]
- C# に typedef がないのは(ry
- 656 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 11:45:28 ]
- >>652
> override があればその危険性を排除できる。 うっかりoverride付け忘れの危険性もあるわけで、どっちもどっちじゃね? まぁ、普通は警告見れば気付くだろうけど それ言ったら「意図しないオーバーライド」も相当間抜けな話だし。
- 657 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 11:52:28 ]
- >>652-656
オマエら他所いってやれ
- 658 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 12:17:17 ]
- >>657
技術屋って上級者ほど空気読めないよな
- 659 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 12:47:39 ]
- たまたま話の流れがそれでヒートしただけでは・・・
- 660 名前:デフォルトの名無しさん [2007/06/19(火) 13:20:48 ]
- JAVAやってみたいがEclipseをIDEに使う場合
他に何を入れればいいかが判らない J2SEいれてそれでOK? JavaSwingとかはJ2SEに一緒に入ってるの?
|

|