傳遞最終對象(下面代碼中的字符串)時,它從匿名內部類打印時顯示爲空。但是,當最終值類型或直接最終字符串傳入時,其值正確顯示。 final
在匿名內部類的上下文中是什麼意思,爲什麼對象傳遞null?傳入匿名內部類時的空對象
public class WeirdInners
{
public class InnerThing
{
public InnerThing()
{
print();
}
public void print(){
}
}
public WeirdInners()
{
final String aString = "argh!".toString();
final String bString = "argh!";
System.out.println(aString);
System.out.println(bString);
InnerThing inner =new InnerThing(){
public void print()
{
System.out.println("inner"+aString); // When called from constructor, this value is null.
System.out.println("inner"+bString); // This value is correctly printed.
}
};
inner.print();
}
public static void main(String[] args)
{
WeirdInners test1 = new WeirdInners();
}
}
這是非常奇怪的行爲,我,因爲期望是字符串爲對象,爲什麼叫toString()
變化的東西呢?
其他信息:此行爲僅在Java 1.4中觀察到,而不在Java 5中。有關解決方法的任何建議?在現有字符串上不調用toString()
是公平的,但由於這只是一個例子,如果我在非String對象上執行它,它會有真實世界的影響。
你在Java 1.4下看到了什麼結果?我正在使用Java 6,並且我得到了(可能不會很好地格式化,並且沒有預覽註釋): argh! 啊! innerargh! innerargh! innerargh! innerargh! 這不是對你有任何幫助,但EOL Notification for Java 1.4於2006年12月宣佈,EOSL for Java 1.4是本週五一年前發佈的。Java 5的EOL Notification是在2008年4月,它在本週五觸及了EOSL。任何你可以升級到Java 6的機會? http://java.sun.com/products/archive/eol.policy.html – shoover 2009-10-28 21:09:37
您將看到預期的輸出。使用「argh!」時1.4行爲是innernull。toString();. – 2009-10-28 23:11:52