1 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 01:35:28 ] 過去ログ、関連スレッド、よくある質問とその回答、 質問をする前に、貴方が見なければならないサイトについての情報は、 下の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質問・相談スレッド98【大歓迎】 pc11.2ch.net/test/read.cgi/tech/1171787388/ /* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。 質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */ また、当スレで質問をするかたは、回答をもらえたときに、 wikiの更新をして頂ければ、忝なく存じます。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作板をご利用ください。pc10.2ch.net/hp/ 次スレは>>980 あたりで。
285 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 14:48:50 ] JAVAでもプロパティ導入すればいいのに・・・ わざわざ毎回アクセッサメソッドつくるとフィールド参照からメソッド記述にするのめんどくさい。
286 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 14:49:35 ] >>284 getと3文字打つのが怠いんだろうね。 って、どんだけwwww まぁ、publicアクセス不要なフィールドにはgetter付けないから 20個フィールドがあってもホントはもっと絞れるんだけどね。
287 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 14:55:29 ] >>285 リファクタリング機能がある開発環境使えば良いじゃん。
288 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 14:56:56 ] >>285 jdk7の議論でプロパティは話題に上っている。 [mustang/Java SE 6] 次世代Javaの動向 4 [dolphin] ttp://pc11.2ch.net/test/read.cgi/tech/1163986696/ の中に、情報へのポインタがあるよ。 まだ本決まりじゃなくて構文は揺れてるだろうけど、 クロージャよりは揉めずに入りそうな気がしてる。
289 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 15:19:31 ] >>258 つ もしかして "自己カプセル化"
290 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 15:38:54 ] >>265 同じクラスないであればthis.idで良いジャマイカ スーパーなときだけgetId()
291 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 15:40:32 ] >>278 Factory MethodパターンやFlyweightパターンで 改造したくなってくるなあ。
292 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 15:41:42 ] >>284 どういうクラスなんだか。委譲も集約を ちゃんと使っていれば極力減らすこともできよう
293 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 15:42:06 ] >>285 IDEで自動生成しろよ
294 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 16:42:11 ] >>292 たとえば携帯電話のスペックをオブジェクトで表現しようとしたら 20なんて軽く超えると思うけど。どうやって削るの? 高さ 幅 厚さ 質量 連続待受時間静止時 連続待受時間移動時 連続通話時間音声通話時 連続通話時間テレビ電話時 液晶サイズメインディスプレイ 液晶サイズサブディスプレイ 液晶最大同時発色数メインディスプレイ 液晶最大同時発色数サブディスプレイ 液晶解像度(ドット数)メインディスプレイ 液晶解像度(ドット数)サブディスプレイ 名前最大登録件数 電話番号最大登録件数 メールアドレス最大登録件数 メール保存容量送信メール メール保存容量受信メール iアプリ保存件数 ミュージックプレーヤー バックグラウンド再生 連続再生 iメロディ・着信メロディ バーコードリーダー 赤外線通信対応 Bluetooth通信 FOMAプラスエリア対応
295 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 16:49:44 ] 携帯電話という込み入ったものをひとつのクラスで完結させようとするという発想が恐ろしい気がする 液晶が別のメーカーのだったら一気に変えないといけないんだよな、そのクラス……
296 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 16:54:28 ] >>294 なんで無理して一つのクラスでやるんだよw
297 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 16:54:52 ] いやいや、例ですよ。車でも住宅でもなんでもいいけど変数が20なんて珍しくない。
298 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 17:00:53 ] >>295 の言葉を借りるが、 車でも住宅でもなんでもいいけど込み入ったものをひとつのクラスで完結させようとするという発想が恐ろしい気がする
299 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 17:02:24 ] オブジェクト指向なんだから、きちんと設計してから作らないとね。 まず、デザインパターンを覚えるといいかな。
300 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 17:08:54 ] だー、論点そこじゃねえええ。 1つのクラスですべてを完結させるなんて一度も書いてねえ。 親クラス、子クラスのように抽象化していったって 20以上の変数を持つクラスはありえるってことです。
301 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 17:15:42 ] あったらあったで仕方ないだろ。 おれならまず分けることを考えるが。
302 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 17:18:16 ] そりゃjava.awt.Componentとか持ち出してきたら50個くらい持ってるようなのもあるわ しかし普通はそんなのはないぞ
303 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 17:22:12 ] よくこんなどーでもいい話題にがんがんレスが付けられるな
304 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 17:33:27 ] あったら、あきらめる。 以上。
305 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 18:08:06 ] どっちみち「エディタで候補を絞るのがメンドイから」なんて理由でクラス設計したらあかん罠w
306 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 18:18:15 ] private int hogehoge; って書いたら、内部で使うために private int getHogehoge() { return hogehoge; } て書かなきゃいけないん?
307 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 18:29:53 ] 内部なら直にアクセスしろよ
308 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 18:30:40 ] 自己カプセルフィールドって考えもある
309 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 18:44:40 ] さすがにそういうあたりは必要なときにリファクタリングすればいいようにおもうなあ
310 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 18:54:48 ] privateなら変更することになっても影響範囲は閉じてるし、 必要になってからメソッドにするでいいよ。
311 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 19:31:02 ] あるURL [1] www.hogehoge.ho.ge/aaa/bbb/index.html からのHTMLの(?)相対アドレス [2] "bbb.html" に対応するURLは [3] www.hogehoge.ho.ge/aaa/bbb/bbb.html だと思うのですが、 [1]と[2]から[3]を得る機能はJavaSE6にはありますか?
312 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 20:23:39 ] >>311 java.net.URI uri = java.net.URI.create("www.hogehoge.ho.ge/aaa/bbb/index.html" ).resolve("bbb.html"); とか。
313 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 20:56:28 ] >>294 配列 or ハイスペック携帯電話のみサポートに切り替えて解決
314 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 21:00:53 ] >>300 『分割し、統治せよ』 『アジャイルソフトウェア開発奥義』にはそう乗っている。 だが、 どうしてもクラスを分割できなければ、 やれることはまだまだある。 ディスプレイのサイズなんぞstaticでやれ。 そんなに苦しいなら配列でやれ。
315 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 21:02:53 ] >>311 そういう機能 とはいわん気がするが。 そういうAPIはありますか、だろ。 機能というとまるで言語仕様のことみたいだ。 その手のAPIは言語仕様とは別だしな
316 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 21:28:56 ] クラスの設計についての本読み始めたところだから結構興味がある。 VCのMFCなんか数十個の関数や変数を含んでいるクラスが普通だから そこまで分割する必要があるのかどうか、 分割するといいことがあるのか知りたいところ。
317 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 21:37:17 ] ソースファイルの数が増えてリッチな気分が味わえます。
318 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 21:39:55 ] 保守性に強くなるとかそんなんだろ コピペが減るとか
319 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 21:51:43 ] >>314 すまんが、何ページ?
320 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 22:07:18 ] MFCはDocumentViewアーテクチャだからあまり参考にするべきでないけど。 変数や関数の数自体は気にするべきではない。 気にするべきはモジュール結合度と強度、クラス設計で委譲・継承などのデザインパターンといったところを気にするべき。
321 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 22:19:18 ] 質問よろしくです。 tiffファイルを操作する簡易エディタを作りたいと思っています。 やりたいこと ・複数のtiffファイルを結合して保存する。 ・複数頁のtiffファイルを1ページ毎に分けて保存する。 ・画像の上にテキストを挿入する Java Advanced Imaging(JAI)を使えば簡単に作れますか? 他に便利なAPIがあれば教えてください?
322 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 23:36:16 ] 質問です。 Javaのメソッドで、C++でいうところのconstなクラス関数を作りたいのですが、可能なのでしょうか? つまり、そのメソッドはメンバー変数の書き換えを行なわないということを保証させたいのです。 色々調べてみたところ、Javaにconstはないとのこと。 似たような機能か?と思ってfinalについても調べてみましたが、期待した内容ではありませんでした。
323 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 23:37:58 ] >>322 >finalについても調べてみましたが、期待した内容ではありませんでした。 kwsk
324 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 23:43:08 ] >>323 ・finalとついたメソッドは、オーバーライドされなくなる ・finalとついた変数は、書き換えられることがなくなる(配列の中身などは書き換えられるので注意) ・finalとついたクラスは、継承されなくなる といった効果のようでした。
325 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 23:53:29 ] >>322 static
326 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 23:56:46 ] >>322 enumじゃダメなん?
327 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 23:58:04 ] 322の内容が理解できない人が多くてワロタw
328 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 23:59:59 ] >>325 ああ、なるほど。確かに。 でも、ちょっと別の制限が強くなりすぎますね。 やりたいことは abstract class IScene { abstract void Task(); abstract void Draw(); } として、これをオーバーライドさせてゲームのシーンを作らせたいのです。 その際、Drawではメンバー変数の書き換えを禁止させたいのです。
329 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 00:07:51 ] staticだと、インスタンス内の変数書き換えは不可能になるが、読み込みも不可能になっちまうか・・・
330 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 00:14:34 ] メンバー変数を、参照は出来るが変更は不可にしたいということなら、 変数はprivateで宣言しておいて、publicもしくはprotectedなアクセサメソッドを 公開しておけばいいんじゃない?
331 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 00:18:13 ] >>330 それ全然『メンバー変数の書き換えが行なわれないこと』が保証できてねーじゃん 継承する側がいくらでも間違いを犯せる C++でもconst_castしちまえばメンバー変数いじれるけどなw
332 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 00:19:41 ] public interface Const{ public static final 〜 } じゃダメなの?
333 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 00:24:07 ] >>322 基本的に無理。 標準APIのメソッド呼び出した時に、そのメソッドがインスタンスの状態を変更しない事まで考えるなら。 JSR-308 のサンプルにある @ReadOnly が それっぽいけど、早くてもJDK7にならないと入らない。 自分のクラスのメンバ変数の書き換え禁止だけなら、@Const みたいなアノテーション自作して、 @Const処理するようなAPTまで自作すれば出来なくはないけど……
334 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 00:24:44 ] >>331 なんで? abstract class IScene { private var1; abstract void Task(); abstract void Draw(); public getVAr1(){ return var1; } } ということだけど。 「Drawではメンバー変数の書き換えを禁止させたいのです」 という要求には答えてると思うけど。 もっとも、Task()メソッドからも書き換えは出来ないけど。
335 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 00:24:53 ] >>332 すいません、>>328 がinterfaceで書くべきものだということは分かるのですが、 それでメンバー変数が書き換えされないことが保証される理由がわかりません。 >>332 のfinalは何に対してついているものなのでしょうか?(変数?メソッド?)
336 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 00:27:05 ] >>334 質問者じゃねーけど、やりたいことくらいは推測できる。お前も少しは推測して書いてやれよw 継承元の変数をいじらせたくないって要望じゃねーだろ。 継承先の変数であってもいじらせたくねーんだろ。
337 名前:332 mailto:sage [2007/03/12(月) 00:33:37 ] >>335 constというか不変変数って意味で回答したんだけど どっからでもアクセスできるしあなたが求めてるものとは違うと思う。 俺には難しくてついていけてないw 一応意図したものは↓みたいなもの。 public interface Const{ /** 1ページの表示件数 */ public static final int COUNT_PER_PAGE = 10 /** 全ページに共通のタイトルプレフィックス */ public static final String TITLE_PREFIX = "[HOGEHOGESERVICE]"; }
338 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 00:33:54 ] >>336 そういう意味か? 自分で定義した変数を読み取り専用にするなんて、 C++でもできないだろ。 スーパークラスで管理する状態などを、サブクラスで勝手に 書き換えられるのが嫌なんじゃないのかな。 だから>>334 でいいかと思うのだが。
339 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 00:38:14 ] えっとすいません。情報が交錯しているようなので再度説明します。 public interface IScene { void Task(); void Draw(); }; ゲームにおいて、全てのシーンは上を継承することを複数人プロジェクトにおいて義務づけます。 そして、このシーンを適切に毎フレーム呼び出す機構は私が作ります。 TaskとDrawは基本的に交互に呼ばれるのですが、フレームスキップが発生した時Drawの呼び出しが飛ばされる可能性もあるのです。 その際、Drawの中でメンバー変数の書き換えをするようなプログラムをされると、わかりにくいバグに繋がります。 C++の時は class IScene { void Task() = 0; void Draw()const = 0; }; で大丈夫だったのですが…。 という相談です。 >>333 については今ぐぐりながら理解しようとしているところです…。
340 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 00:39:20 ] >>338 >自分で定義した変数を読み取り専用にするなんて、 >C++でもできないだろ。 できるよハゲw const関数は何のためにあんだ。
341 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 00:43:20 ] C++のconstメンバ関数が何なのか知らない奴がレスしてるな。
342 名前:338 mailto:sage [2007/03/12(月) 00:43:38 ] 悪い、別に断言したつもりはなかったんだが。 「C++でもできないだろ」 じゃなくて 「C++で出来たっけ?」だな。 C++はずいぶんやってないんで忘れた。
343 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 00:56:05 ] てか、なんでJavaにはconstがないのか不思議でならない。 キーワードだけは定義されてるって書いてあるけど、なんで削られたん?
344 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 01:15:37 ] C# には const あるけど const 関数は無いな。
345 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 01:18:40 ] >>343 お馬鹿なJavaプログラマにはまともに使いこなすことができないだろうという判断から。
346 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 01:23:46 ] むしろその逆で過剰な安全装置と見なされて削られたって話じゃないの? C++をメインで使ってる身からすると全然過剰だとは思わないけど。
347 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 04:47:35 ] const関数で呼び出されたら、その中から変数にアクセスする際に やはり const として宣言されていない関数は呼び出すことができないのかな
348 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 06:43:57 ] コンパイル時に「変数が変更される可能性があります」とエラーが出る 呼び出せたらconstの意味がない
349 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 09:19:31 ] JavaってC#におけるXmlSerializerのようなものは無いんでしょうか? オブジェクトを丸ごと渡してやればXMLファイルに書き出してくれて、 XMLファイルを丸ごと渡してやればもとのオブジェクトを生成してくれるという
350 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 09:34:33 ] >>349 近いのは java.beans.XMLEncoder と java.beans.XMLDecoder かな? 保存できるのは beans のプロパティだけになっちゃうけど。
351 名前:デフォルトの名無しさん [2007/03/12(月) 16:33:01 ] String s; if(s = "") { } 間違えて上のコードを入力したとき s = "" の部分に「型の不一致: String から boolean には変換できません。」 というエラーメッセージが出てきました。 自分にはどう見ても右辺左辺ともにString型としか思えないのですが、なぜこのようなメッセージが出たのですか?
352 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 16:39:02 ] まず、javaでは比較する場合は==を使う =だと代入になってしまい、ifの中にはbooleanを入れなきゃいけないのにStringになってしまう 次に、==にしてもお前の期待する動作はしない java String 比較 でググれ
353 名前:デフォルトの名無しさん [2007/03/12(月) 17:03:10 ] >>352 Stringの比較はequals()メソッドで行うということですね 簡潔でわかりやすいレスありがとうございます
354 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 17:19:32 ] >>353 そっちはどちらかというとこの質問においてはオマケ。 =を比較のつもりで使っているほうが本質的な間違い。
355 名前:デフォルトの名無しさん [2007/03/12(月) 17:26:02 ] >>354 すみません。はじめの時点で言葉足らずでした 比較に = を使ってはいけないのは知っていたのですが、 VBの癖でついやってしまい、エラーが出て、 >>351 の疑問が出たので質問させていただきました。
356 名前:デフォルトの名無しさん [2007/03/12(月) 17:30:11 ] Javaでアプリケーションを作成しています。 二重起動を防止する案を考えているのですが File.createTempFile(String prefix, String suffix)でファイルを生成して File.deleteOnExit()で削除指定 ファイルの有無で起動中かどうかを判断するという処理にしようかと思ってます。 『もっと良い案があるよ』 『そのやり方だとこういう問題が発生する』 等御意見頂けますでしょうか。
357 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 18:51:39 ] >>356 createTempFile だと、 prefix + "java.io.Fileが勝手に付加する文字列" + suffix って 名前のファイルを作っちゃわない? 二重起動防止にならんと思うけど。 あと、deleteOnExit だと、正常に終了できなかった場合はファイル残ったままになるよ。 もっとも、正常に終了できなかった場合にファイルを削除する方法は 今のところ提供されてないので二重起動の場合はダイアログだして ユーザが選択できるようにした方が良いかも。v2c がやってるみたいに。
358 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 18:55:11 ] >>355 Java では、 if(式) の式の部分は boolean じゃないとエラーになる。 if(s = "") の 「s = ""」って代入式の型は String なので、 コンパイラに boolean じゃないと怒られただけ。
359 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 19:00:25 ] あらかじめ決めておいたポート番号のソケットをオープンできたら起動、 というのを見かけた。レースコンディションにはならないような気がする。 ・異常終了したときの後始末はうまくできるんだろうか。 ・ユーザー単位でのみ複数起動を禁止して別ユーザーなら起動を許す、 みたいなのは工夫が必要になるな。 RMI Registry(Activation)やJMXでなんかやれそうな気がしないでもない。
360 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 19:11:37 ] >>357 ありがとうございます。 Preferences+ユーザー選択って感じにしようかな・・・。
361 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 19:13:45 ] >>359 なるほど・・・ソケットは思いつかなかった。
362 名前:デフォルトの名無しさん [2007/03/12(月) 20:30:57 ] synchronizedのブロックの適用が及ばない範囲、及ぶ範囲、そしてその理由について わかりやすく教えてもらえませんか('A`) 同時に動くスレッド2個ぐらいで、、 HP5箇所ぐらい見たんですがいまいち理解できません
363 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 20:57:50 ] >>357 俺は nio のファイルロックで判定した。
364 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 20:58:59 ] 356あてだった・・
365 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 21:05:56 ] HashMapでClass<T>とList<T>を関連付けたいのですがいい方法はありませんか?
366 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 21:07:40 ] >>365 HashMap<Class<T>, List<T>>
367 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 21:14:41 ] >>366 あの……それだとHashMapをnewするときにTになにか入れないといけないけどそういう使い方を意図しているのではなくて。 T.classをキーにしてgetしたらList<T>型のオブジェクトが返ってくるようにしたいんです。 もしくはList型オブジェクトをなんかしてList<T>型にキャストするとか。
368 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 22:02:31 ] >>367 「関連づけたい」という曖昧な言葉を使ったことへの反省はしないのね。
369 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 22:52:46 ] >>368 反省しました ……ってなんて答えりゃいいかわからんそのあてつけみたいなのやめてくれよ…… 一回で伝わらなかったら何度か説明する機会くらい与えてくれよ…… 人格攻撃して話題そらしたいのか? 無理なら無理でいいよ別の方法考えるから……
370 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 22:55:18 ] >>367 HashMapを継承した新しいクラスを作ればいい。
371 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:03:31 ] >>370 Class<T>とTのときはそれでできたんだけど、(内部でHashMap<Class<?>,Object>に委譲して出口でclazz.cast(map.get(clazz))を返すようにした) List<T>のときはどうやって実装すればいいかわからないんです。 Reflection周りでいろいろ探してはいるんですが……
372 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:06:28 ] >>371 public <T> List<T> get(Class<T> c) { return (List<T>)get(c); }
373 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:07:22 ] 間違えた。 return (List<T>)super.get(c);
374 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:17:47 ] >>372 いけました。 ここで出る未チェックのキャストはアノテーションで強制的に黙らせる他ないんですよね?
375 名前:デフォルトの名無しさん [2007/03/12(月) 23:52:35 ] switchの条件にlong型が使えないのはなぜなんでしょうか char,short,int,enumは使えるのに 何か歴史的な理由があったりしますか? 効率?
376 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 00:10:08 ] long は int に暗黙的にキャストできないから。
377 名前:365 mailto:sage [2007/03/13(火) 00:31:52 ] ありがとうございました。 何とかうまくいきそうです!
378 名前:デフォルトの名無しさん [2007/03/13(火) 03:06:04 ] //入力データ読み込みオブジェクトの 作成 BufferedReader myReader=new BufferedReader( new InputStreamReader(System.in),1); //敵出現メッセージ System.out.println("敵が現れた。"); //味方、敵初期値 int mikata=5; int teki=5; while(teki>0){ //数値入力 System.out.println("どうする?1:攻撃、2:回復"); System.out.println("行動:"); //数値を読み取り、変数に代入 Int mystring =myReader.readLine(); Int koudou = Integer.parseInt(mystring); と思われる部分で;が足りませんというエラーが出ました、どう修正すればいいのですか?
379 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 03:10:28 ] ・エラーメッセージはそのまま書く。改変されると推測が困難。 ・ソースは必要な箇所を可能な限り原文に忠実に記述する。 Int とか、「作成」から始まる行とか、何が正しいのか分からない。
380 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 16:28:12 ] interface と abstract class の違いが良くわかりません。 interface でなければならない(もしくはその方がよい)場合、 また逆にabstract class でなければならない場合とは、 どんな場合なのでしょうか??
381 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 17:26:30 ] Javaでは多重継承できないから属性を表すような実装はInterface 一方、デフォルト実装を与えたい場合などはabstract class
382 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 17:47:50 ] このクラスは○○というメソッドを持っているよ→interface このクラスをベースに○○というメソッドを使って機能拡張してね→abstract class
383 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 22:58:08 ] 型の継承 → interface 実装の継承 → abstract
384 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 23:05:27 ] >>380 ・ある性質に特有の処理が存在する。部分的に実装を共有できる。 もしくはどうしてもある種の実装が必要だ。 (interface は実装をもてない。abstract class はもてる。) ・その性質の出現する場面が予想できる。もしくは限定した局面でしか使用しない。 (あとから再利用を試みる場合、interface の方が制約が少ない。 abstract class だと、別のクラスの継承が必要な時にはもう使えない。) 上記を満たすなら abstract class。 制限をかけることによって(考えることを減らすことで)実装を容易にしたい場合も。 それ以外は interface。 interface の方がより純粋。制限が少なくて柔軟性が高い。 反面、実装の手間が多くなる。 最近は「とりあえずinterfaceにしとけ」な気がする。 実装に関してはヘルパークラスやテンプレートクラスを内包して、 そっちに処理を転送する方法で、継承と大差ない手間で済む。 その上で拡張性を保てる。 GUIフレームワークの基本部品なんかは abstract class ベースのものが多い。 画面表示に関する基本実装がどうしても必要とかそんなんだろうか。
385 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 23:08:57 ] 非オブジェクト指向言語だからといって オブジェクト指向的にプログラムがかけないことはないように、 abstract class を interface代わりに使ってプログラムは書けるだろうけど、 そんな悲しいことは普通はしない。