私のプロジェクトにはいくつかのクラスがあります。コンパイル後、name.class と name$.class の 2 つの Java ファイルをクラスごとに見つけました。その理由は何ですか?クラスについて特別なことは何も見ていません。
ご挨拶
私のプロジェクトにはいくつかのクラスがあります。コンパイル後、name.class と name$.class の 2 つの Java ファイルをクラスごとに見つけました。その理由は何ですか?クラスについて特別なことは何も見ていません。
ご挨拶
例のように、匿名の内部クラスです。
new Runnable() { ... }
編集:コメントからのいくつかの有効なポイント:
enum
型も別のクラス ファイルにコンパイルされます (これらは実際にはクラスであるため)。MyClass$1.class
、MyClass$2.class
など)。MyClass$InnerNamedClass.class
)パブリック クラスに内部クラス (匿名または名前付き) があります。この動作は正常です。Java コンパイラは、ソース ファイルで定義されているクラスの数に関係なく、クラスごとに 1 つの .class ファイルを生成します。
Java コンパイルは、.java ファイルで定義されたすべてのクラスに対して .class ファイルを作成します。次のような匿名の内部クラスが必要です。
button.addListener(new PressListener() {
public void onPressed(Event event) {
System.out.print("test");
}
});
Java の内部クラスは にコンパイルされClass$InnerClass
ます。
クラスに名前を付けた場合は、クラスの名前が使用されます。クラスが匿名の場合、つまり次のようなものがあります。
final ActionListener actionListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
};
次に数字が使用されるので、これは になりますClass$1
。