- PR -

同じファイルの中に定義しているclass同士の交差参照問題

投稿者投稿内容
isseki
大ベテラン
会議室デビュー日: 2001/11/05
投稿数: 107
投稿日時: 2002-08-18 02:31
こんにちは

さっそくですが、
同じjavaファイルの中に下に示したように二つclassを定義されているとします。

public class XXX {
XXX() {QQQ q;}

}

class QQQ {

QQQ(XXX x) {...}

}

すると、
コンパイルしたら、
XXX1.class
XXX2.class
:
:
QQQ1.class
QQQ2.class
:

のような番号付きのclassが複数生成され、実行する時に異なる番号のclassの中のメソッドが
callされ、不都合を来します。

こんなJAVAにちょっとがっかりしています。
どうすればいいでしょうか、アドバイスをいただきたいです。

どうぞよろしくお願い致します。
asip
ベテラン
会議室デビュー日: 2001/12/27
投稿数: 77
投稿日時: 2002-08-18 13:33
コード:

public class XXX {
XXX() {QQQ q;}
}
class QQQ {
QQQ(XXX x) {}
}


上記のコードをJDK1.3.1_04及びJDK1.4.0_01のjavacでコンパイルしたところ
XXX.classとQQQ.classのみが生成され、issekiさんの遭遇されたような状況
にはなりませんでした。

issekiさんの遭遇された状況を再現するには開発環境の情報及び
再現コードの公開が必須です。

クラス間での相互参照については
http://java-house.jp/ml/
で過去の記事を"相互参照"で検索すると情報が得られます。

[ メッセージ編集済み 編集者: asip 編集日時 2002-08-18 14:08 ]
isseki
大ベテラン
会議室デビュー日: 2001/11/05
投稿数: 107
投稿日時: 2002-08-19 13:30
asipさん
ご返答ありがとうございます。
私も初めて、勝手に番号を付けるjavcの動きに遭遇するのです。

ソースは二本があってともに長い、疑うところも見当つけていないので、
ソースを出すのを控えさせていただきます。

とりあえず、いろいろ探ってみないです。
またよろしくお願い致します。

t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2002-08-19 15:36
> コンパイルしたら、
> XXX1.class
> XXX2.class
> :
> :
> QQQ1.class
> QQQ2.class

XXX$1.class
XXX$2.class
:
:
QQQ$1.class
QQQ$2.class
ではないですか?
ひろ
常連さん
会議室デビュー日: 2001/12/13
投稿数: 36
投稿日時: 2002-08-19 16:33
こんにちは。

私も最初のコードでなぜそういったクラスファイルができるのか不思議に思ったのですが、
もっと長いソースのようなので、単に無名内部クラスが含まれてるのではないかと思います。
swingとかじゃないですか?
isseki
大ベテラン
会議室デビュー日: 2001/11/05
投稿数: 107
投稿日時: 2002-08-20 18:48
t-wataさま、ひろさま
お世話になっております。
返事が遅れて申し訳御座いません。

t-wataさまWrote:
>QQQ$1.class
>QQQ$2.class
>ではないですか?
その通りです。m(__m


ひろさまWrote:
>単に無名内部クラスが含まれてるのではないかと思います。
>swingとかじゃないですか?
鋭ーい!
下のようなコードが存在しています。
addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent evt) {
setCursor(new java.awt.Cursor(Cursor.HAND_CURSOR));
// canvas1MouseEntered(evt);
}
}
);

addMouseListener(new MouseAdapter() {
public void mouseExited(MouseEvent evt) {
setCursor(new java.awt.Cursor(Cursor.DEFAULT_CURSOR));
}
}
);

これで、..$1.class, ..$2.class が多数存在しても正常ということでしょうか。

よろしくお願い致します。


t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2002-08-21 09:15
> これで、..$1.class, ..$2.class が多数存在しても正常ということでしょうか。

正常です。なので、最初の質問にあった、

> 不都合を来します。

は、無名インナークラスのせいではないはずです。
isseki
大ベテラン
会議室デビュー日: 2001/11/05
投稿数: 107
投稿日時: 2002-08-21 13:33
t-wataさん
ありがとう御座います。

isseki:
>実行する時に異なる番号のclassの中のメソッドが
>callされ、不都合を来します。
俺の勘が間違ったのです。
さらに調べます。
改めて御礼を申し上げます。
また宜しくね。


スキルアップ/キャリアアップ(JOB@IT)