我有一個類似的Java代碼:java的括號使用
AnObject anObject = new AnObject() {
int count;
public int creation() {
return count;
}
};
我無法理解的大括號的意思。一個遵循構造函數的類? 謝謝!
我有一個類似的Java代碼:java的括號使用
AnObject anObject = new AnObject() {
int count;
public int creation() {
return count;
}
};
我無法理解的大括號的意思。一個遵循構造函數的類? 謝謝!
基本上,它是AnObject
沒有名字的子類。
這匿名,因爲它不具有一個類名稱聲明(例如class Foo
),並且這是因爲它被另一個類中定義(其不似乎在提供的代碼中所示的內部類。 )
javac
通常會命名這些類與一個$
包含類和一些數字標識符,如Foobar$1
- 你可能會發現你<EnclosingClass>$1.class
編譯代碼之後。
(其中<EnclosingClass>
是包含匿名內部類的類。)
這是該類的定義。它被稱爲Anonymous Class。
在這種情況下在大括號用於創建的AnObject
一個匿名子類。大括號內是作爲覆蓋超類的方法的新字段和方法。對於更簡單的抽象類或接口,這種模式非常普遍,例如「就地」創建偵聽器。
這是一個匿名的內部類。
的代碼幾乎是一樣的:
private class Foo extends AnObject {
int count;
public int creation() { return count; }
}
...
AnObject anObject = new Foo();
有一些細微的差別,但:
final
的。它創建一個匿名內部類。
上有以下站點約anonoymous內部類的一些非常有用的教程。 Anonymous Inner class tutorials
不檢查,我想你會發現一個 $ 1.class您編譯代碼之後。 –
Puce
@Puce我檢查了你是正確的 - 它是在'class'文件名中使用的封閉類的名稱。編輯答案。謝謝! :) – coobird