我有一個有很多最終成員的類,它們可以使用兩個構造函數之一進行實例化。構造函數共享一些代碼,存儲在第三個構造函數中。在Java中初始化最終字段
// SubTypeOne and SubTypeTwo both extend SuperType
public class MyClass {
private final SomeType one;
private final SuperType two;
private MyClass(SomeType commonArg) {
one = commonArg;
}
public MyClass(SomeType commonArg, int intIn) {
this(commonArg);
two = new SubTypeOne(intIn);
}
public MyClass(SomeType commonArg, String stringIn) {
this(commonArg);
two = new SubTypeTwo(stringIn);
}
的問題是,這段代碼不能編譯:Variable 'two' might not have been initialized.
可能有人可能來自內部MyClass的調用第一個構造函數,然後將新的對象就沒有「二」中設置。
那麼在這種情況下,在構造函數之間共享代碼的首選方法是什麼?通常我會使用一個輔助方法,但共享代碼必須能夠設置最終變量,這隻能從構造函數完成。
很難按照目前的理解你的問題,你有兩個相同的* *構造函數(參數相同,相同體)。你能解決它更具代表性嗎? – 2013-02-15 22:58:52
在第一個構造函數中,兩個未初始化。 – 2013-02-15 22:59:39
@Jon Skeet - 再看看,參數類型是不同的。 – 2013-02-15 23:01:02