2010-04-23 23 views
4

我想知道,如果有人可以解釋下面的代碼是如何工作的:返回使用最終基元的匿名類。它是如何工作的?

public interface Result { 
    public int getCount(); 
    public List<Thing> getThings(); 
} 


class SomeClass { 
... 
    public Result getThingResult() { 
    final List<Thing> things = .. populated from something. 

    final int count = 5; 

    return new Result { 
     @Override 
     public int getCount() { 
     return count; 
     } 

     @Override 
     public List<Thing> getThings(); 
     return things; 
     } 
    } 
    } 
... 
} 

哪裏做原始的INT,參考名單和列表實例獲取存儲在內存?它不能在堆棧中,所以在哪裏? 在這種情況下如何處理引用和基元是否有區別?

感謝一束, 添P.

+1

您想解釋一下這是用於哪種語言,操作系統和實現?然後你可以把信息放入標籤中,或者我可以。現在,你在問一個具體的問題,但並不限於知道答案的人。 – 2010-04-23 14:27:15

+0

@JRL,這不會解釋它如何在Java中實現。 – finnw 2010-04-23 14:37:44

+0

對不起,首先發布在stackoverflow上。 – 2010-06-15 10:44:19

回答

4

所使用的最終當地人(和任何外this參考文獻)被複制到在施工期間內類的合成領域。參考文獻和原始文獻一如既往的一致。兩者都(淺)複製。

您可以使用JDK中的javap來查看正在生成的內容。

+1

......這就是爲什麼他們必須是最終的:所以沒有人可以說變量是簡單的複製。 – 2010-04-23 14:36:10

+0

@Michael當然,可以靜靜地做額外的分配來在堆上存儲可變狀態。 – 2010-04-23 14:38:10

+0

@邁克爾:你可以通過使用數組(或任何其他容器;一個「持有人」將工作得很好)來破解你的方式。凌亂,但工作。 – 2010-04-23 14:40:49