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 あたりで。
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代わりに使ってプログラムは書けるだろうけど、 そんな悲しいことは普通はしない。
386 名前:デフォルトの名無しさん [2007/03/13(火) 23:27:22 ] x64で動作するeclipseってあったっけ? もしくはjava用のIDE
387 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 23:34:38 ] >>380 interfaceを作って、abstract で骨格実装(デフォルトの実装)を作って、 多くの実装クラスを骨格実装を継承するようにすると 柔軟な構造になるよ。ひと手間掛かるけど
388 名前:380 mailto:sage [2007/03/14(水) 00:14:01 ] なるほど… デフォルト実装の必要性と、プログラムの柔軟性との兼ね合いってことでつね。 みんなありがd
389 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 00:38:02 ] >>333 不変クラスつくればいいだけだろう。 あれでconstなクラスは作れる。 無理って事は無い。
390 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 00:39:26 ] >>324 配列の中身が書き換えられないように、 Collections.unmodifiableList()を使うとか、 clone()を使うとか、考えようぜ。 IBMのdwで、不変クラスで検索してみ。 constに相当するものを作る方法がのってる。 Wikipediaの「イミュータブル」でも検索してみると良い。
391 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 00:39:54 ] >>327 しばらくスレを見ていなかったので>>322 のことにまだ気づかなかっただけだ。
392 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 00:41:03 ] >>332 それは、Effective Javaでは禁じ手とされているものだぞ。 攻めて、enum型にせよ。enumが駄目ならfinalでコンストラクタがprivateなクラスを。
393 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 00:41:49 ] >>337 定数インタフェースは、勝手に実装されることがあるからやめとけ。
394 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 00:41:58 ] public class Hello { public static void main(String args[]) { System.out.println("Hello!"); } }
395 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 00:43:43 ] >>343 代替手段があるからいらないんだよ。 constは余計なゴミなんだよ。ゴミ。 全てを不変にしたくないときはfinalのほうが柔軟性が効くんだよ柔軟性が。 部分的に可変にしたほうがよいこともあろう。 >>345 みたいな浅はかでお馬鹿なC言語厨には理解できないが。
396 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 00:44:43 ] >>351 FindBugsを使え。そういう問題が起きても 困惑することは無くなるだろう
397 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 00:47:22 ] >>375 switchは総ナメ野郎の糞だから
398 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 00:53:34 ] >>395 防御的コピーって知ってる? 代替手段がないからこんなことしないといけないんだけど。
399 名前:デフォルトの名無しさん [2007/03/14(水) 01:06:51 ] 質問なんですが、下記のようにジェネリクスを使ったインタフェースを使って 実装クラスを書くと意図したように実行まで行えるのですが、 アノテーションを入れるとメソッドのオーバライドをしていないと怒られてしまいます。 これはアノテーションが間違っているのでしょうか? それともアノテーションを使っていない方はたまたま実行まで出来てしまっただけで、 本来ならコンパイルが出来ないはずなのでしょうか。 public interface Base<T>{ public void print(T data) ; } public Derived implements Base<Integer> { public void print(Integer data ) { System.out.println(data.toString() ) ; } }
400 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 01:23:52 ] >>399 Derived のメソッド定義に @override をつけたものとして話を進めるけど それはオーバライドじゃないから怒られる。ジェネリクス関係ない。
401 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 01:42:18 ] >>398 不変じゃなかったら、constつけてても防御コピーしなきゃだめだろ
402 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 01:56:36 ] >>401 残念ながらC++のconstは防御的コピーする必要はない。
403 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 02:20:34 ] 勝手にコピーされるから? 不変でないオブジェクトは、明示的にせよ暗黙的にせよコピーしないと、 中にしまいこんだはずのオブジェクトを勝手に編集される可能性がある。
404 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 02:42:49 ] 不変バージョンと可変バージョンが1つのクラスで定義でき、 const つけると不変クラスとして使えるってことか? たしかに、両方のバージョンをそれぞれ作るのは面倒
405 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 02:43:16 ] 超初心者です。。midiを内部で生成して再生するプログラムを作ろうと、ググっていて java-house.jp/ml/archive/j-h-b/039552.html の話を見つけました。確かに static byte test [] = new byte [] {0x7f, 0x80}; とやってみると、0x80以上を代入しようとすると「精度が落ちている可能性 期待値int」 とか言われてしまいます。 リンクにあるようにjpgBuff[j] = (byte)jpgBuff_i[j];で変換すると正しく扱えるようなのが不思議です。 >しかし int に入れておいて byte にするというのは、意味がないように >思います。というか、int でできるなら byte でソースに埋めこんでも >できなきゃおかしいですよね。ただ代入しているだけなんだし。何か >その辺もおかしいのでは? とあるように0xffまではbyteで扱えるはずですよね? 0x80以上をbyteな配列に代入するにはどうすればいいんですか? 何か勘違いをしているようでしたらご指摘をお願いします。。
406 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 02:58:05 ] byte は 0 〜 255 じゃない -128 〜 127 なんだよ……
407 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 03:04:54 ] >>405 > とあるように0xffまではbyteで扱えるはずですよね? 違う。byteは -128〜127まで。 キャストを使って符号を無視するように明示しないかぎり byte では 255(0xFF) は扱えない。 > 0x80以上をbyteな配列に代入するにはどうすればいいんですか? 直接的にはキャストを使う。 間接的には String から byte配列に変換するようなユーティリティメソッド作るとか "\u007F\u0080".getBytes("ISO8859-1"); みたいに文字列リテラル使ってみるとか。
408 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 03:21:44 ] >>406-407 ありがとうございます。 >直接的にはキャストを使う。 java-house.jp/ml/archive/j-h-b/026824.html を参考に byte b = (byte)0xff; でエラーが出ないことは確認できました。 配列の場合は static byte test [] = (byte []) new int [] {0x7f, 0x80}; とかやってみたんですが、どうもうまく行きません(変換できない型) これは後出しで変換するしかないんでしょうか?
409 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 03:24:00 ] static byte[] test = new byte [] { (byte)0x7f, (byte)0x80 };
410 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 03:33:54 ] なるほど、確かにうまく代入されています。 ただ毎度面倒くさいし、見掛けも悪いのであらかじめ -128 〜 127 の数値で扱うようにしておいたほうが 良いかも、と思いました。。。 ありがとうございました。
411 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 04:26:00 ] UByte 型作っちゃいなYO
412 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 05:30:50 ] ejbってもう誰も使ってないの? みんなjspで力つきたのか? phpレベルの底辺が好きなんだね。
413 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 08:25:06 ] >>412 ばかめ!EJB2は死んだわ!