爲什麼該方法以'return new'開頭?java方法聲明開始於:'return new'(關於匿名類的混淆)
public Iterator<T> iterator() {
return new Iterator<T>() {
...
}
}
爲什麼該方法以'return new'開頭?java方法聲明開始於:'return new'(關於匿名類的混淆)
public Iterator<T> iterator() {
return new Iterator<T>() {
...
}
}
iterator()
返回Iterator<T>
類型,所以該方法應當具有return
聲明隨後Iterator<T>
類型的一個對象的方法。
new Iterator<T>() {
...
}
這是一個匿名類,您可以在該匿名類中實現所有抽象方法的實例化接口實例。閱讀更多關於Anonymous classes。
感謝您指點我正確的方向。 – jollyroger 2012-03-15 17:22:58
這會創建該類的一個實例(事實上,它將創建類的子類,因爲@biziclop已被挑選)並返回它。這通常是在「工廠」之類的類別中,沿着這些線路:
public static Button createButton(int x, int y, String label){
return new Button(x,y,label){
void onClick(){
...
}
}
}
/* .... */
Button b = Toolkit.createButton(20,20,"Hello!");
我知道這是挑剔的,但它創建了**類的子類**,然後是該類的一個實例並返回它。這個區別很重要,因爲你可以(並且確實經常會)用抽象類和接口來做到這一點。 (在後一種情況下,它創建了一個實現,但這是挑剔++)。 – biziclop 2012-03-15 17:22:58
@biziclop大聲笑,但感謝您的挑剔。我會編輯答案。 – ApprenticeHacker 2012-03-15 18:10:59
你看到的是一個方法,public Iterator<T> iterator()
,它返回一個新的匿名內部類的實例,而不是一個方法。如果你以前從未見過匿名的內部類,混淆是可以理解的。
這是一樣的迭代變量用「新」,後來分配回。 – darijan 2012-03-15 17:17:44
你似乎認爲它是返回新的(....)。它實際上是返回(新的...); – Thomas 2012-03-15 17:17:46
當然,但爲什麼不在方法裏面有這個return語句? – jollyroger 2012-03-15 17:17:59