我可以在幾個例子在網頁上看到一個新的語法對我來說,這裏是一個例子:理解語法
Accumulator<Integer> sum = new Accumulator<Integer>(){
public Integer accumulate(Integer t1, Integer t2) {
return t1+t2;
}
};
在一般情況下,這是什麼意思,當一個製作的實例後寫道{ a method }
一類?這是某種古老的語法嗎?
謝謝
我可以在幾個例子在網頁上看到一個新的語法對我來說,這裏是一個例子:理解語法
Accumulator<Integer> sum = new Accumulator<Integer>(){
public Integer accumulate(Integer t1, Integer t2) {
return t1+t2;
}
};
在一般情況下,這是什麼意思,當一個製作的實例後寫道{ a method }
一類?這是某種古老的語法嗎?
謝謝
您正在創建一個匿名內部類。
new Accumulator<Integer>() {
@Override
public Integer accumulate(Integer t1, Integer t2) {
return t1 + t2;
}
};
定義了Accumulator
的匿名實現。然後,您繼續將此匿名類的參考分配到sum
。
認爲它是同時定義和分配實現的便捷方式。這是一個syntactic sugar。
不,這是一個匿名的內部類。它具有它的類型的接口或類的簽名,但可以覆蓋公共方法。
這是一個常用的匿名內部類。
報價「匿名類本質上是一個沒有名字的本地類」。
它要麼使用重載方法創建匿名子類,要麼使用匿名接口實現(取決於Accululator是類還是接口)。
這是一個匿名類聲明的例子。
Section 15.9.5Java Language Specification討論了這些類型的聲明。
這被稱爲匿名內部類,即沒有名稱的類,因此可以與其唯一的一個實例一起創建。當需要實現某個接口並且只需要這種實現的一個實例時,這是減少項目中可見類的數量的方法。
但不要濫用此功能。只有在實現很簡單時才使用它(1-2行)。
這是一個*匿名的內部類*。看到[這個答案](http://stackoverflow.com/questions/355167/how-are-anonymous-inner-classes-used-in-java)的更多細節。 –