程序代碼:我想最終的變量初始化成一個功能
public class A{
public static final String l;
public void method(String strTestData){
l = strTestData;
}
}
strTestData將包含類似「公共靜態最終java.lang.String中刪除」的數據。 有可能嗎?
程序代碼:我想最終的變量初始化成一個功能
public class A{
public static final String l;
public void method(String strTestData){
l = strTestData;
}
}
strTestData將包含類似「公共靜態最終java.lang.String中刪除」的數據。 有可能嗎?
這是不可能的。
如果聲明一個static final
字段,它必須在靜態初始化程序中或在聲明點進行初始化。您以後不能修改該值。例如:
public static final String l = "Foo";
或
public static final String l;
static {
l = "Bar";
}
也許你應該只是刪除final
修改?
如果一個變量被聲明爲final,那麼只能初始化它一次。事實上,你需要初始化一次。當你聲明成員變量或者構造函數時,這必須發生。
試圖改變它也是不可能的。
OP的變量是'static',所以它不能在構造函數中初始化。 – GriffeyDog
您無法初始化方法中的final
變量。這是需要的,因爲編譯器需要確保該變量僅初始化一次。
可以隨時調用一個方法,因此編譯器無法確保該變量只被初始化一次。
我想最終的變量初始化成一個功能
NO,你不能做到這一點。這是根據JLS8.3.12:
它是一個編譯時間錯誤,如果空白的最終(§4.12.4)類變量 未明確賦值(§16.8)通過靜態初始化(§8.7) 它聲明的類。
空白最終實例變量必須在 被明確賦值(§16.9)每一個構造的端部(§8.8),其中它是 聲明的類的;否則會發生編譯時錯誤。
因此你的代碼應該是這樣的:
public class A{
public static final String l;
static
{
l = "Static String initialized..";
}
}
或者,你可以在聲明時初始化最後的變量,如下所示:
public static final String l = "Static String initialized..";
是否有具體原因的情況下方法正在影響一個類變量(它不允許這樣做,但它是不尋常的) –
如果你想讓一個類在使用前經歷一個初始構建狀態,可以考慮使用* builder模式*來代替 - 分離日e生成器部分分成一個獨立的類。這可以讓您將最終字段保留在構建的類中。 –