以下兩種情況似乎工作:內部類和字符串在Java中
public class A {
private class B {
public static final String str = "str";
}
}
public class A {
private static class B {
public static final String str = new String("str");
}
}
但是下面給出在評論中指定的錯誤:
public class A {
private class B {
//The field str cannot be declared static;
//static fields can only be declared in static or top level types
public static final String str = new String("str");
}
}
爲什麼它被允許在前面兩種情況以及爲什麼它會導致上一個問題?
它不僅僅是'new String(...)'。它是任何不是編譯時常量表達式的*初始值設定項。 –
對。 'new String(「literal」)'可能被編譯器認爲是「安全的」並且被允許,但是這樣你就沒有必要的通用規則。 –