【初心者】Java質問・相談スレッド76【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/11/27(日) 19:24:09質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/
これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。
よくある質問
・「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
http://www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals を使え。
・内部クラスから外部クラスのローカル変数は使えない。他の方法を考えろ。
前スレッド
【初心者】Java質問・相談スレッド75【大歓迎】
http://pc8.2ch.net/test/read.cgi/tech/1131860937/
/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。
JavaScriptの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc5.2ch.net/hp/
次スレは>>980あたりでお願いしまする。
0237デフォルトの名無しさん
2005/11/30(水) 22:33:590238デフォルトの名無しさん
2005/11/30(水) 23:18:310239デフォルトの名無しさん
2005/11/30(水) 23:50:52正解です
0240デフォルトの名無しさん
2005/12/01(木) 00:56:20以下のコードを実行すると、毎回必ず[1000]が出力される事を期待しているのに
何回か実行を繰り返していると、1000未満の数値が出力されます。
これは何故でしょうか?環境はjava1.5.0_5です
public class ThreadTest {
static volatile int c;
public static void main(String[] args) throws Exception {
Thread t0 = new MyThread();
//この間にt1〜t8もnewする
Thread t9 = new MyThread();
t0.start();
//この間にt1からt8もstart()する
t9.start();
t0.join();
//この間にt1からt8もjoin()する
t9.join();
System.out.println("[" + c + "]");
}
}
class MyThread extends Thread {
public void run() {
for (int i = 0; i < 100; i++){ThreadTest.c++;}
}
}
0241デフォルトの名無しさん
2005/12/01(木) 01:03:450242デフォルトの名無しさん
2005/12/01(木) 01:06:26コメント有難うございます。
volatileは変数へのアトミックなアクセスを行うための修飾子であると
理解していたのですが、それは誤りだということでしょうか?
volatileの修飾子を使う事により、どのような効果があるのでしょう?
0243デフォルトの名無しさん
2005/12/01(木) 01:08:48volatile 使って劇的に結果が変わるコードを書いたことがない (-∀-;
ちなみにアトミックな方は synchronized で、volatile は変数のキャッシュを抑制するはず。
volatile は無視されるという話も聞いたことがあるが……正直どうだったか。
0244デフォルトの名無しさん
2005/12/01(木) 01:10:14大体10クラス程度、8000ステップぐらいで納めたいのですが
どんなもんでしょう?
0245デフォルトの名無しさん
2005/12/01(木) 01:12:33volatileはスレッドで行なった変数書き込みがちゃんと反映されることを保障するだけ。
だからそのコードでは100以上になれば正しい挙動。
0246デフォルトの名無しさん
2005/12/01(木) 01:15:19Hibernateじゃいかんのかい?
0247デフォルトの名無しさん
2005/12/01(木) 01:17:28なるほど、無視される可能性があると言う事ですか。
実装はVMに依存されていると言う事なのかな・・。
>>244
一番簡単なテストプログラムならば
Entityを1つ、それとMainクラスを1つの2クラスで十分だと思います。
Java5を使うならば、Annotationを使う事をオススメします。
それならば、あとはhibernate.cfg.xmlを1で合計3つのファイルだけでOKだと思います。
サンプルは
http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/
を参考にすれば大丈夫だと思います。
簡単に書く為には、Entityのクラス名とプロパティ名はテーブルと全く同一にし、
classに@Entity、pkのプロパティに@IdをつけるだけでOKです。
あとはDBにあるデータをSelectしたり、Updateしたりするだけのコードでも書けば
資料としては十分ではないでしょうか。
0248デフォルトの名無しさん
2005/12/01(木) 01:21:050249デフォルトの名無しさん
2005/12/01(木) 01:27:35>volatileはスレッドで行なった変数書き込みがちゃんと反映されることを保障するだけ。
私のテストプログラムでは、10あるスレッドがそれぞれ変数cを100インクリメントしています。
なので、インクリメントが必ず反映されるならば、cの値は1000になると推測しました。
しかし、1000未満の値になる場合があるので、これはスレッドで行った変数書き込みが
他のスレッドに反映されていないケースがあるのだと理解しました。
これは私の理解に誤りがあるのか、プログラムに問題があるのか・・。
ちなみに、volatileは単なる興味でテストしてみただけで、
実際に使う事は永遠にないとは思います。
0250デフォルトの名無しさん
2005/12/01(木) 01:29:44volatileとインクリメントの併用は間違えやすいポイントだよ
c++はワンステップで行われるわけでは無く
1)cのロード
2)c += 1の実行
3)cのストア
の3ステップがある。この場合タイミングによっては、
スレッド1 スレッド2
1) c = 10 1) c = 10
2) c += 1 2) c += 1
3) c = 11 をストア
3) c = 11 をストア
となる事がある
volatileは各1)2)3)をアトミックにしてくれるだけ
意味無いじゃんと思うかも知れないが、longやdoubleでは意味がはっきりするよ
0251デフォルトの名無しさん
2005/12/01(木) 01:30:200252デフォルトの名無しさん
2005/12/01(木) 01:31:01>>240 の場合はAtomicIntegerで良いんじゃない?
0253デフォルトの名無しさん
2005/12/01(木) 01:31:12syncronizedやLockのatomicとは違う
0254250
2005/12/01(木) 01:32:290255デフォルトの名無しさん
2005/12/01(木) 01:33:37たまたまカウントが分かりやすいから例に出しただけとおもわれ
当たり前だけどatomicは融通が利かないしね
一般のアプリでソースにatomicでてきたらぶちころすかも
0256デフォルトの名無しさん
2005/12/01(木) 01:34:03なるほど!そういうことだったのですね!
ご回答有難うございました。謎がすっきりしました。
longやdoubleが何故はっきりするかが判りませんが
それは自分で調べてみます。
0257デフォルトの名無しさん
2005/12/01(木) 01:43:47無視されてるというよりは
同時に書き込まれてるんでない?
0258デフォルトの名無しさん
2005/12/01(木) 01:47:52自分が結城先生の本を立ち読みしてちょっと考えたのは
インターフェイスとは
public interface Understandable {
void implCode();
}
class User implements Understandable {
public void implCode() {
System.out.println("実装コード");
}
}
class X_interface {
public X_interface(Understandable code) {
//此処にスレッドなり、ボタンアクションなりの挙動を書く。
//このコードが複雑でも再利用が可能。例えば
for(;;){
code.implCode();
}
}
}
でスレッドとかはjavaVMに何か仕掛けが有ってX_interfaceを呼び出すとか
考えました。
まぁインターフェイスの使い方とかはこんな感じと思うですけど
0259デフォルトの名無しさん
2005/12/01(木) 01:48:590260デフォルトの名無しさん
2005/12/01(木) 01:51:09+1した値を書き込む前に読み込むことが問題
0261デフォルトの名無しさん
2005/12/01(木) 01:51:56どなたか解決法が分かる人とかいらっしゃませんでしょうか・・・・?
Java Studio Enterprise 8でコード書こうとしたら画面が真っ暗で・・・
javaの2ちゃんブラウザーもPCが落ちます。
jamesやtomcatは大丈夫なんですけども。
java web startが怪しいけど・・・かなり。
0262デフォルトの名無しさん
2005/12/01(木) 01:57:52あ、java web startでマシンが落ちる現象は私の周りで
複数件発生しています。あなたのPCでもそうですか。
しかし、同じアプリであっても、別なPCでは無問題だったりもします。
原因は皆目わからないです。
0263デフォルトの名無しさん
2005/12/01(木) 02:02:20あ、やっぱりそうですか・・・・
j2se 1.42_06と
j2sdk1.42_06と
j2se5.0を入れてて
Java Studio Enterprise 8は5.0を使ってるのに
落ちるとは・・・・
やっぱ消した方が良いのかな。
0264デフォルトの名無しさん
2005/12/01(木) 02:03:11とりあえず、ディスプレイドライバと、マザーボードのBIOSを
最新版にする事以外に対策は思いつかないです。
0265デフォルトの名無しさん
2005/12/01(木) 02:07:22色々教えて頂いて有り難う御座います。
なるほど・・・・
ってか自分のPC aviの画像見てても偶に変な挙動するし。
やっぱりそこら辺の対策した方が良さそうですね。
ハードには詳しく無くて大変そうですが検討してみます。
0266デフォルトの名無しさん
2005/12/01(木) 02:23:00ハードウェアアクセラレータ最小にしてみたら?
0267デフォルトの名無しさん
2005/12/01(木) 05:22:21void useIn();
}
class UseIn implements InterIn {
public void useIn() {
// TODO 自動生成したメソッド・スタブ
System.out.println("実装コード");
}
}
class ReUseIn {
private InterIn objIn;
public ReUseIn(){
objIn = new UseIn();
}
public ReUseIn(InterIn objIn) {
// TODO 自動生成したコンストラクター・スタブ
this.objIn = objIn;
}
void reUse() {
//此処に複雑なコード
objIn.useIn();
}
}
0268デフォルトの名無しさん
2005/12/01(木) 05:23:58public static void main(String[] args) {
new ReUseIn().reUse();
}
}
もっと勉強せな、駄目だな。
コードは読み慣れてるけど全然書く訓練して無かった。
0269デフォルトの名無しさん
2005/12/01(木) 07:28:01ソースは部分的なので必要な情報が足りないかも知れないのですが、
ーーー
String dat = new String("file.txt");
String numdat = ReadData(dat);
System.out.println("data:num="+numdat) ;
System.out.println("!!!A!!!");
int pnum = Integer.parseInt(numdat);
System.out.println("!!!B!!!!");
pnum++;
ーーー
こんな感じに実行してみたいのですが、どうやら
int pnum = Integer.parseInt(numdat);
ここに問題があるようです。
一度この行を
int pnum = Integer.parseInt(ReadData(dat));
としたところ、うまく動いたのですが、出来なくなってしまいました。
コンパイルは出来ていて、ReadData()はファイルパスをStringで受け取って、内容(1行のファイル)をStringで返すメソッドです。
実行するとA間で標示されるので、メソッドに問題はないと思うのですが・・・。
どなたかアドバイスをして頂けませんか?
0270デフォルトの名無しさん
2005/12/01(木) 08:25:45まずは日本語を勉強したらどう?
ReadData(dat)の戻り値を確認したのか?
0271デフォルトの名無しさん
2005/12/01(木) 09:31:19ここの
"ソースプログラムはこちら"ってところにあるプログラムを実行すると
どんなプログラムになりますか?
結果が表示されないので知りたいです
0272デフォルトの名無しさん
2005/12/01(木) 09:37:46SJC-Pを取得するにはまだまだ知識は不足していますか?
とりあえずSJC-Aを受験するほうがいいのでしょうか?
基本情報の勉強と並行してSJCも取得したいと思いましたもので。
ご教授よろしくおねがいします。
0273デフォルトの名無しさん
2005/12/01(木) 11:56:510274デフォルトの名無しさん
2005/12/01(木) 12:09:28内部クラス(非static なメンバークラス)なら、A.this.hoge でアクセスできる。
0275デフォルトの名無しさん
2005/12/01(木) 12:17:12A.thisでいいんですね。
ありがとうございました。
0276デフォルトの名無しさん
2005/12/01(木) 13:06:190277デフォルトの名無しさん
2005/12/01(木) 13:10:010278デフォルトの名無しさん
2005/12/01(木) 13:23:16(この場合、請求金額5000、利子年間12%、12回払い)
-------------------------------------------------------------
回数 利子 今月支払った金額 残りの請求金額 総合利子
1 50.00 394.24 4605.76 50.00
2 46.06 398.19 4207.57 96.06
3 42.08 102.17 3805.40 138.13
(省略)
12 4.40 435.45 0.00 330.93
-------------------------------------------------------------
と、表示されるようなプログラムを組みたいのですが、
どのようにすれば上のように表示されるのでしょうか?
while文を使うらしく、今月支払った金額は、
(残りの請求金額 * 利子)/ (1 - Math.pow(1/(1+利子),回数))
で求める事が出来るそうです。
ちなみに、請求金額、利子、支払い回数は、
請求金額が100〜1,000,000,00、利子が5〜25、支払い回数が1〜30の数値を下回るが超えると、
再入力するようにうながせとの事です。
0279デフォルトの名無しさん
2005/12/01(木) 13:29:02---------------------------------------------------------------------
回数 利子 今月支払った金額 残りの請求金額 総合利子
1 50.00 394.24 4605.76 50.00
2 46.06 398.19 4207.27 96.06
3 42.08 102.17 3805.40 138.13
(省略)
12 4.40 435.45 0.00 330.93
---------------------------------------------------------------------
0280デフォルトの名無しさん
2005/12/01(木) 14:11:50>うながせとの事です
宿題スレ行け
0281デフォルトの名無しさん
2005/12/01(木) 15:56:12私見だけど、SJC-P資格を受けるに当たってSJC-Aは必要ないから、
SJC-Aはいらないと思う。ベンダー資格だから試験代高いしね・・・
お金に余裕があるなら受けても良いけど。
0282デフォルトの名無しさん
2005/12/01(木) 17:00:09わかりました。
0283デフォルトの名無しさん
2005/12/01(木) 17:04:50数値を文字列に変換するのって
どうでしたっけ?
0284デフォルトの名無しさん
2005/12/01(木) 17:07:200285デフォルトの名無しさん
2005/12/01(木) 17:08:16どうって?
0286デフォルトの名無しさん
2005/12/01(木) 17:10:33その使い方を教えてください。
0287デフォルトの名無しさん
2005/12/01(木) 17:13:110288デフォルトの名無しさん
2005/12/01(木) 17:13:33String.valueOf
0289デフォルトの名無しさん
2005/12/01(木) 17:16:210290デフォルトの名無しさん
2005/12/01(木) 17:21:320291デフォルトの名無しさん
2005/12/01(木) 17:26:580293デフォルトの名無しさん
2005/12/01(木) 17:42:52そんなコードみたら、続きを読む気なくすw
0294foo
2005/12/01(木) 17:46:070295デフォルトの名無しさん
2005/12/01(木) 17:49:22マルチイクナイ
0296デフォルトの名無しさん
2005/12/01(木) 17:53:390297デフォルトの名無しさん
2005/12/01(木) 19:07:580298デフォルトの名無しさん
2005/12/01(木) 19:20:37本当にいろいろあるなぁ
0299デフォルトの名無しさん
2005/12/01(木) 20:03:530300デフォルトの名無しさん
2005/12/01(木) 20:49:21誰かお願い♪
0301デフォルトの名無しさん
2005/12/01(木) 21:38:52やりたいことの意図が見えないです。
田の区画の画像を切り出して、
色を平坦化する縮小でもして、
1ピクセルにしてから読み込むとかか?(´・ω・`)
0302デフォルトの名無しさん
2005/12/01(木) 22:07:20白白白白白白白白白
白0000000白
白0赤0青0緑0白
白0000000白
白0黄0赤0緑0白
白0000000白
白0青0赤0黄0白
白0000000白
白白白白白白白白白(0=黒、白は以外の各色のピクセル値は同じ)
このJPG画像の黒の中にある色のRGBを得るにはどんな処理を行えばいいのかわかりません。
0303デフォルトの名無しさん
2005/12/01(木) 22:21:18平坦化して圧縮したら各色のピクセル値が1ピクセルになるんですか?
もし、そうならそれの方が簡単にできそうです。
0304デフォルトの名無しさん
2005/12/01(木) 22:21:51このクラスでタブ区切りのウィンドウを作ったとして、
タブの部分を右クリックできるようにはできるのでしょうか?
つまりですね、
_____
_| ab |_____
| |
のabってなっているところを右クリックして、名前を「ab」→「cd」に変更するような
プログラムを作りたいんですが、どうやればいいか教えてください。
0305デフォルトの名無しさん
2005/12/01(木) 22:26:43class CoinBank {
private String owner;
private int balance;
CoinBank(String owner, int balance) {
this.owner = owner;
if (balance >= 0) {
this.balance = balance; } }
void setOwner(String owner) {
this.owner = owner; }
String getOwner() {
return this.owner; }
int getBalance() {
return this.balance;
}
void save(int amount) {
this.balance += amount; } }
class Test{
public static void main(String args []) {
CoinBank coinbank1 = new CoinBank("タカシ", 1000);
CoinBank coinbank2 = new CoinBank("ユミコ", 5000);
System.out.println(coinbank1.getOwner() + "の貯金箱には、" + coinbank1.getBalance() +"円入っています");
System.out.println(coinbank2.getOwner() + "の貯金箱には、" + coinbank2.getBalance() +"円入っています");
System.out.println(coinbank1.getOwner() + "が500円貯金します" );
coinbank1.save(500);
System.out.println(coinbank1.getOwner() + "の貯金箱の中身は、" + coinbank1.getBalance() +"円になりました"); } }
CoinBankクラスのsave()で使われているamountはフィールドの宣言をしなくても使えるのですが、
それは何故なのですか?
0306デフォルトの名無しさん
2005/12/01(木) 22:30:33{
int amount = 500;
this.balance += amount;
}
こんな感じ。
0307305
2005/12/01(木) 22:48:24レスありがとうございます。
amountはローカル変数なんですね。
色々考えたのですがなぜamountだけローカル変数で使用するのかがよく分かりませんでした。
もしよかったら教えてください。
何度もすみません。
0308デフォルトの名無しさん
2005/12/01(木) 22:52:22無理やり説明すると工場(saveメソッド)の入り口(()の部分)まで材料は込んだら、それを中に運び込む人(int amount)が引数。
0309デフォルトの名無しさん
2005/12/01(木) 23:03:15double getArea();
}
interface Shape3D{
double getVolume();
}
class Point3D{
double x,y,z;
Point3D(double x,double y,double z){
this.x=x;
this.y=y;
this.z=z;
}
}
abstract class Shape{
abstract void display();
}
0310デフォルトの名無しさん
2005/12/01(木) 23:04:53引数はわかってるつもりなんですが・・。
う〜ん、何でamountだけローカル変数でもいいのかがどうしても分からない・・。
ちょっとプログラムを書き換えて色々試してみます。
どうもありがとうございました。
0311デフォルトの名無しさん
2005/12/01(木) 23:05:19Point3D center,p;
Circle(Point3D center,Point3D p){
this.center=center;
this.p=p;
}
public void display(){
System.out.println("Circle");
}
public double getArea(){
double dx=center.x-p.x;
double dy=center.y-p.y;
double d=dx*dx+dy*dy;
double radius=Math.sqrt(d);
return Math.PI*radius*radius;
}
}
0312デフォルトの名無しさん
2005/12/01(木) 23:05:39Point3D center;
double radius;
Sphere(Point3D center,double radius){
this.center=center;
this.radius=radius;
}
public void display(){
System.out.println("Sphere");
}
public double getVolume(){
return 4*Math.PI*radius*radius*radius/3;
}
}
class sample151{
public static void main(String args[]){
Circle c=new Circle(new Point3D(0,0,0),new Point3D(1,0,0));
c.display();
System.out.println(c.getArea());
Sphere s=new Sphere(new Point3D(0,0,0),1);
s.display();
System.out.println(s.getVolume());
}
}
0313デフォルトの名無しさん
2005/12/01(木) 23:06:220314デフォルトの名無しさん
2005/12/01(木) 23:06:26俺はC言語やってたときの配列とかポインタがそうだった。何故周囲がつまずくのかまったく理解できなかった。
0315デフォルトの名無しさん
2005/12/01(木) 23:10:09円と球の面積と体積を求めてるだけ
0316デフォルトの名無しさん
2005/12/01(木) 23:10:130317デフォルトの名無しさん
2005/12/01(木) 23:11:22そうじゃなくて、、、、インターフェイスの事とかもっと詳しく・・・詳細に教えてくらはい・・・すいません。
0318デフォルトの名無しさん
2005/12/01(木) 23:37:35どうして・・・Sphereなんて名前のクラスを使うんだろう。
0319デフォルトの名無しさん
2005/12/02(金) 00:40:27継承とインターフェイスが有る。
俺の苦手なスレッドが良い例。
Threadを継承する方法とRunnableを実装する方法が有る。
振る舞い(スレッド)と実装(自分で書いたメソッド)が分離されてるから
自分の好きなメソッドを簡単(でも無いけど)スレッドに出来る。
要するに自分が考える所のインターフェイスは
或る特定のクラスにオブジェクトを渡すsetterみたいなモノって事ダス。
間違ってたら誰か訂正してね・・・
でもクラスのグループ化って答えよりは進歩して気がする。
0320デフォルトの名無しさん
2005/12/02(金) 00:50:520321デフォルトの名無しさん
2005/12/02(金) 00:52:45変にライブラリとかにしようと思わないなら
AWTでいいんじゃない?
0323デフォルトの名無しさん
2005/12/02(金) 01:08:39トン
0324デフォルトの名無しさん
2005/12/02(金) 01:34:55EffectiveJavaに書いてある通りのやり方にするべきだろうか?
それともJakarta Commons LangのEqualsBuilder, HashCodeBuilderクラスを使って
EclipseのプラグインCommonclipseまたはCommons4Eを使って
実装すべきだろうか?
Commons4Eが自動生成するequals()の実装で、
先頭部分に
public boolean equals(Object obj){
if(this == obj){
return true;
}
が無いのがどうも気に入らなく、自動生成した後でわざわざ自分でこれを
書き足している。このほうがパフォーマンス向上につながるし。
hashCode()のほうすら自動生成すると
private transient int hashCode = 0;を宣言して高速化させているというのに。
0325デフォルトの名無しさん
2005/12/02(金) 01:38:45equals()の処理をその程度高速化して、メリットあるのか?
一昔前のCPUオーバークロックバカと同じ匂いがするんだがキノセイか?
0326デフォルトの名無しさん
2005/12/02(金) 01:40:35Canvasとセットで使うの?
だってBufferStrategyって要するにダブルバッファの
発展系の機能を提供するクラスなんだよな?
グラフィック系はあまり経験無いのでよく分からん
0327デフォルトの名無しさん
2005/12/02(金) 01:41:14Stringみたいに頻繁に見比べるようなクラスなら自分で加えればいいじゃん。
0328デフォルトの名無しさん
2005/12/02(金) 01:41:34Java Genericsだ。
Efective Javaには
equals(Object)の代わりに
equals(自作クラス)を実装するなといっている。
これはObject#equals(Object)のオーバーライドではなく
オーバロードだ、だから絶対に実装するな、と言っている。
だが、Comparable<T>インターフェースは
こんなコードに成り代わっている。
public interface Comparable<T>{
public int compareTo(T t);
}
compareTo(Object)と
compareTo(自作クラス)
どっちを実装すればいいだろう? 後者だけで問題無いんだろうか?
0329デフォルトの名無しさん
2005/12/02(金) 01:42:15フルスクリーンでやることを前提とした機能だよ
ウィンドウ付きでやるならInsetsで枠を計算すること
0330デフォルトの名無しさん
2005/12/02(金) 01:43:38ヒトムカシマエは、Javaヒープでダブルバッファリングしてました。
BufferStrategyはVolatileImage(VRAM)でページフリッピ
ングをサポートするので、ずっとはやいっす。
0331デフォルトの名無しさん
2005/12/02(金) 01:45:05Effective Javaには
クラス内に大量のフィールドまたは
巨大なオブジェクトを抱えている場合に
先頭で==がtrueだったらtrueを返すというのは有効な手法だと
述べている。
equals()メソッドを呼び出舌先には
巨大なオブジェクトのequals()メソッドを
実行しなければならず、さらにその巨大オブジェクトの
中にあるフィールドは巨大でそれをさらにequals()して(ry
という繰り返しがあることをかんがえると
==はかなりパフォーマンスを高めると思う。
EffectiveJavaにはそう書いてあった。
0332デフォルトの名無しさん
2005/12/02(金) 01:45:09一番右のマスに3行目まで表示させるところまで作りましたが、okを押すとなぜかエラーが大量に出てしまいます。
ご指摘願います。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1184.txt
0333デフォルトの名無しさん
2005/12/02(金) 01:46:29使い方によるんじゃないかとおもうが
複数のクラスオブジェクトをコレクションに格納することがあって、
そのうちの一つがそのクラスなら、comareTo(Object)実装しとか
ないとランタイムエラーでそうなきがするなあ。
0334デフォルトの名無しさん
2005/12/02(金) 01:46:55Stringじゃなくても
HashMapクラスはどではequals()メソッドは
正しく実行されていないとうまく動かずnullが返ってしまう。
0335デフォルトの名無しさん
2005/12/02(金) 01:48:43なるほどね。クラスの構造によるわけだな。そりゃそうだ。
コードジェネレータの生成コードに手を加えるのは、メンテナンス
コストの増加に繋がるとおもいますので、まあバランスとってやる
べきでしょうな。
0336デフォルトの名無しさん
2005/12/02(金) 01:49:54Comparableは該当クラス以外のクラスのインスタンスをObject引数に与えた場合は
ClassCastExceptionを投げなければならないのでcompareTo(T)だけでいい。
■ このスレッドは過去ログ倉庫に格納されています