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


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

【初心者】Java質問・相談スレッド102【大歓迎】



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あたりで。

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に一緒に入ってるの?

661 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 13:32:02 ]
>>660
J2SEも含めて何もいれる必要はない。
しいて言えば、基本APIドキュメントの日本語版程度。

662 名前:デフォルトの名無しさん [2007/06/19(火) 13:45:21 ]
>>661
レスサンクス
逝って来る

663 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 13:56:05 ]
>>656
override がないとエラーなんすけど・・・

664 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 15:00:24 ]
>>663
今のところJavaではオーバーライドするのにoverrideなんてものは要らん
他の言語の話なら他所でやってくれ

665 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 15:35:47 ]
つーか
>するとSpecialHogeのAssertValidはあとから追加されたHogeの同名メソッドをオーバーライドしてしまって

こうなる前にまず、リファクタリングでスーパーのメソッドに移動してると思うんだが。
ただの不注意、誰でもあるからどうしようもない。



666 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 15:51:39 ]
現実的に起こりえるのは、オーバーライドしちゃいけないメソッドをオーバーライドしちゃったというケースだからね。
finalがあるのでこれを防ぐってのがJavaの設計思想なわけだ。
orverrideと書かなきゃオーバーライドできないってのもありだけど、ダメと言っているのにオーバーライドする馬鹿がいるとしたらJavaのが優秀w

667 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 16:04:04 ]
>>663
> 10.2.2 The new modifier
> A class-member-declaration is permitted to declare a member with the
> same name or signature as an inherited member. When this occurs,
> the derived class member is said to hide the base class member.
> Hiding an inherited member is not considered an error,
> but it does cause the compiler to issue a warning.

668 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 22:45:34 ]
>>667
エラーだろうが警告だろうが上の文脈では本質的に同じだろう。
つかさすがにそれはスレ違い

669 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 22:53:36 ]
javaってC#のnewオーバーロードに相当する機能はないの?

670 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 22:55:21 ]
>>667
いや、>>656は区別してるから文脈上は別。
区別できてなかったら>>663がアホなんだろ。

っつか、スレ違いならレスつけるな

671 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 22:56:11 ]
>>669
newオーバーロードが欲しいケースって、どんなケース?

672 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:00:55 ]
Charset charset1 = Charset.forName("SJIS");
CharsetDecoder decoder = charset1.newDecoder();
ByteBuffer bb = ByteBuffer.wrap("a".getBytes());
System.out.println(decoder.decode(bb).toString());

先生・・・aが表示されんとです・・。

673 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:10:36 ]
>>672
1.6以降だと表示される。1.5、1.4だと駄目だったと思う。

bugs.sun.com/bugdatabase/view_bug.do?bug_id=6196991
が原因。CharsetDecoder#decode(ByteBuffer) のバグ。

674 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:13:21 ]
>>672
2文字(ab)以上でないとダメみたい

675 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:21:57 ]
>>672
1.4でソース読んでみた。
0.5(平均バイト) × 1(バイト) が 0になる為、1バイトは無視されるバグだった。



676 名前:669 mailto:sage [2007/06/19(火) 23:24:21 ]
>>671
すまん変な表現だった
C#では、派生クラスでnewキーワードを使ってスーパークラスと同じシグネチャの
メソッドを定義して、スーパークラスのメソッドを隠してしまえるの。
オーバーライドとは違って、派生クラスのオブジェクトをスーパークラスの
オブジェクトとして扱えば、スーパークラスに定義されたメソッドが呼び出される。
newを付けなくても動作は同じなんだけど、コンパイラで警告が出る。
こんな感じ
class A{public virtual void Method();}
class B : A{public new void Method();//オーバーライドするときはnewじゃなくてoverride}

677 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:26:43 ]
>>676
それは知ってる。

で、具体的にどんなケースで必要になるの?って質問なんだが。






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

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

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