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 あたりで。
237 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 09:01:07 ] >>236 parseInt を3つまとめてtry-catchするんじゃなくて、 ひとつづつtry-catchすればわかるじゃん。 あとはカウンタ変数でも作って、今何番目のparseIntやってるかわかるようにするとか。
238 名前:223 mailto:sage [2007/03/10(土) 09:06:27 ] >>237 ひとつずつキャッチする手はもうやってみたのですが、やっぱりそれが一番早いですかね? カウンタ変数のほうをチャレンジしてみたいと思います。 ありがとうございました!
239 名前:223 mailto:sage [2007/03/10(土) 09:17:34 ] >>237 忘れてました。ひとつずつtryのすぐあとでcatchしていくと例外は拾えるんですけど、 処理をそこで終われないですよね?その後にある計算式は例外でも実行されてしまって エラーになってしまいました。 もし、ひとつずつtry-catchしていくのであれば、どこに計算式などを入れるべきですか?
240 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 09:41:12 ] >>236 入力ください で吹いたw
241 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 09:42:37 ] >処理をそこで終われないですよね? return;
242 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 10:39:34 ] >>239 try-catchだと記述が長ったらしくなるから、parseをラップするメソッドを作る手もある。 引数は文字列、戻り値はInteger但しparse失敗時はnull。 そのメソッドの中でtry-catchを使う。 .NETにあるTryPaseの亜流みたいなもん。
243 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 10:55:31 ] HashMapを使って文字列と数字を扱いたいのですが HashMap<String, int>はintがObjectじゃないからできないんでしょうか? この場合HashMap<String, Integer>とするべきですか?
244 名前:221 mailto:sage [2007/03/10(土) 10:59:49 ] >>232 スクールに通ってましたが素人同然です('A`) 関連付けはjavawを変更できないとすると、 結局>>221 のプログラムはwクリックでは実行出来ないということでしょうか? 誰かにこのプログラムを使ってもらう時に 「コマンドプロンプトからjava -jar Test.jarって入力してね」 と言うのはちと苦しいです。
245 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 11:03:57 ] >>243 プリミティブ型は入れられないのでそうする必要がある。 使うときはautoboxing/unboxingが効くので直接プリミティブを使う コードを書いてもOK。コンパイラがこっそりIntegerに入れたり出したり してくれる。
246 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 11:05:08 ] @echo OFF java -jar Test.jar なバッチを一緒に置いておいてもダメだっけか? 最近WindowsでJava使ってないから忘れたわ。
247 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 11:15:38 ] >>245 ありがとうございます 色々調べたり実験したりでちょっと遅れてしましました 宣言だけIntegerにすれば、他ではintとして扱っても問題ないんですね
248 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 11:52:50 ] >>244 ダブルクリックみたいなGUIど真ん中なことやりたかったら、普通はswingとか使う。 コマンドプロンプトがどうしても必要な場合は>>246 の言うとおりバッチでラップすればおk。
249 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 14:31:28 ] >>219 ありがとうございます。 調べてみたら、Javaの上位IOクラスは内部バッファとして8192byteつかっていることがわかりました。 その値に統一して使いたいと思います。
250 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 14:34:43 ] バッチファイル使うんなら、pause で入力待ちすればOKか。
251 名前:221 mailto:sage [2007/03/10(土) 15:47:13 ] バッチファイルというのは初耳でした。 >>246 をTest.jarのあるフォルダにa.batとして保存してこれをwクリックで無事実行できました! 皆さんに感謝します。
252 名前:230 mailto:sage [2007/03/10(土) 17:44:56 ] なるほど、ヌル文字列とヌルポインタの関係みたいなもんですね(`・ω・´) 遅レスですが、ありがとうございました。
253 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 17:55:32 ] Cのようなポインタを使用するプログラムだと常識として覚えてるものだが、 JAVAのようなオブジェクト指向だとポインタ意識しなくていいから知らない人が増えてきたな。 便利になると共に起こる、知識不足の弊害だな。
254 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 18:10:00 ] >>253 >JAVAのようなオブジェクト指向だとポインタ意識しなくていいから んなアホな
255 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 18:13:10 ] >>254 ポインタ操作って普通に使わないでしょう。
256 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 19:23:16 ] ポインタ演算とか冗長な書き方を許容してないだけでポインタを使ってることを意識しないわけじゃないだろ
257 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 19:27:04 ] 意識しなくていいというと語弊があるが、 実際に意識していない初心者が増えてきたってことだと思う。
258 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 21:02:20 ] private int id; public int getId(){return id;} public void showId(){ System.out.println("idは" + ● + "です。"); } この場合、●に入れるのはidかgetId()のどっちがいいんかな。 好みの問題でおk?
259 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 21:03:49 ] >>216 つうか、他のIOクラスでデコレートすれば サイズなんて気にしなくても良いはずだが。
260 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 21:06:24 ] >>246 つうか、マニフェストとJava Web Start使えよ
261 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 21:22:11 ] >>258 getId() がいいと思う。
262 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 21:27:19 ] >>261 thx
263 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 21:39:39 ] >>261 おなじ暮らすないならidでもいいとは思うけど。
264 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 23:06:13 ] >>261 うーん、悩ましい問題だなぁ…好みというか、目的による? けど、まぁ、getId()のほうが良いと思う。 例えばそのクラスのサブクラスでgetId()をオーバーライドして getId() { return "00" + id; } とかしたときに・・・
265 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 23:11:29 ] >>264 を風呂入る前に訂正 まず、アンカーは>>258 に。 あと、 ×getId() { return "00" + id; } ○getId() { return "00" + super.getId(); }
266 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 23:13:02 ] >>265 …駄目だ俺(笑 getId()は int なのな。 まぁ意図は汲み取ってください(汗
267 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 01:21:31 ] 抽象化はその部分における汎用性・再利用性を増すが 同時に複雑さが増し、保守が難しくなる。 また、よく考えられていない抽象化は、 結局それを使う場合に1から考え直す必要があり、 無駄な労力になる。むしろ、誤解を生む弊害すらある。 そして、「よく考える」とは言っても難しく、的外れになることが多く、 無駄な抽象化がプログラム中に散乱することになりやすい。 そこで、アジャイル的には、まず単純に作って、 例えば顧客に叩いてもらって、抽象化が必要なところを早期に発見する。 (テスト駆動なら、まずテストに叩かれるだろう) その観点から見ると、 必要と分かるときが来るまで getId() よりも id を使うのがいい。
268 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 03:00:38 ] 外から見ることを基準に考えちゃ駄目なのかな。 getId で取得した値と showId で表示した値は、大抵の場合で一致しなければおかしいから、 直感的に考えた場合は id より getId のほうが適切だろうと思う。たとえ getId が final だったとしてもね。
269 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 03:05:07 ] 追記:「外から見る」ってのは、id が private であって外から見れないことも含めてる。 外から見た場合、id を使うと 『何かよく分からないけど ID の内部表現を showId が表示している』 ってなって分かり難いんじゃないかと。
270 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 08:53:30 ] >>268-269 同意 使う側の視点で考えるのがいいと思う idという情報をを操作したい人のためのものなのだからその人のことを 考えなければ、悪く言えば独りよがりな実装になってしまうと思う
271 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 09:06:40 ] 俺の経験から言うと、極力生のフィールドは使うべきではない。 ボトルネックになる可能性、どうしても生フィールドでなければできない処理などは 例外的に使用を許可する、くらいの縛りを加えるようにする方が良い。 トラブル対応、仕様変更対応には絶対にこの方針が必要。無いと死ぬ。大規模だとね。
272 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 09:19:12 ] 使う場所によってフィールドを直接参照したりgetter経由だったり まちまちなのは良くない。
273 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 11:09:41 ] モジュール結合度の観点から考える結合度は低い方が独立性が高いため、 データ結合で単一のデータを引数として渡すべき。
274 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 11:29:20 ] iを打てば補完できるのでid。 getterはgetIまで打たないと補完が面倒。
275 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 12:02:11 ] >>271 同意! >>274 開発時に面倒臭がって楽しようとすると後々痛い目にあったりする予感
276 名前:デフォルトの名無しさん [2007/03/11(日) 12:32:01 ] 30個近くのclassファイルをjarにコンパイルするにはどうすればいいんですか?
277 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 12:49:20 ] >>276 jar cf foo.jar *.class 詳しくはここを読め。 ttp://java.sun.com/j2se/1.5.0/ja/docs/ja/tooldocs/windows/jar.html 「jarにコンパイル」と言われると違和感を覚えるな。
278 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 13:17:31 ] >>274 getまで打てば、そのクラスのアクセッサが一覧出来るのでむしろ便利。 フィールド名だとごちゃごちゃしてる。 >>271 んだんだ。 それに、遅延初期化の為にも入れているかな。 private Hogehoge hogehoge; public Hogehoge getHogehoge(){ if( hogehoge==null ){ hogehoge = new Hogehoge(); } return hogehoge; } (synchronized はどうしたとかややこしい話は取りあえず抜きな、初心者スレだと荒れそうだから)
279 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 13:25:43 ] >>278 フィールドが20個あればgetまで打っても20個出てきてそこから選ばないといけない。 変数名なら頭文字打つだけで絞り込める。 まあ俺はthis.をつけるのでそこまで打つだけでOKのときもあるが。
280 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 13:26:13 ] >>277 j2re1.4.2_13 をDL、インストールしてみたのですがこの後がわかりません コマンドプロンプトに打ち込んでも 'jar' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 とでてきてしまいます;;
281 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 13:59:17 ] パスが通ってない >>1 を読め
282 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 14:06:44 ] >>280 j2re だと jar 入ってないような。 j2dk か jdk 使え。
283 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 14:07:40 ] >>280 コマンドプロンプトに java -version って打ってみ?
284 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 14:45:08 ] フィールドが20個あったらthis打っても20個候補が出るだろうによw
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]"; }