2012-03-24 53 views
0

NetBeans是給我一個警告,每噸約警告:構造函數中的可重寫方法調用...用於getters?

可重寫方法都在構造

與我曾爲什麼重寫的方法構造函數的調用,不建議讀了。但是目前構造函數中的方法純粹是類成員的getter方法。

所以在這種情況下,當可以重載的方法是純粹的getters時,可以在構造函數中使用它們嗎?正如我所看到的,我沒有太多的選擇,我需要在構造函數中初始化這些變量。我可以創建一個像CustomInitComponents這樣的私有方法,將我的變量設置代碼放在那裏,然後從構造函數中調用它...會被認爲是更好的練習嗎?

回答

2

他們是吸氣劑還是吸附劑?因爲在你的問題結尾,你寫了關於「初始化這些變量」,而不是檢索它們的價值。

在任何情況下,您都可以直接設置並獲取它們(derived.x = ...... = derived.x),或者您可以擁有超級構造函數來初始化它們而不必關心調用覆蓋方法。

+0

我得到他們,因爲我實際上設置他們的屬性,例如。我需要用this.getMyLabel()設置JLabel中的文本。setText() – csss 2012-03-24 14:13:38

+0

引用教程 - http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html - 「通常情況下,你會把代碼在構造函數中初始化一個實例變量。「如果你遵循正常的程序,你已經有了一個不需要getter方法的所有實例變量的句柄。 – emory 2012-03-24 14:46:58

2

不,特別是getter可能會在構造函數中導致問題,因爲它們返回的字段可能尚未初始化。

實施例:

abstract class A { 
    public A() { 
    System.out.println(getName()); 
    } 

    public abstract String getName(); 
} 

class B extends A { 
    private String name; 

    public B (String n) { 
    name = n; 
    } 

    @Override 
    public String getName() { 
    return name; 
    } 
} 

在這種情況下,A構造將第一運行和呼叫getName()。但是,由於B的構造函數尚未執行,因此字段name仍然爲空,因此getter將不會返回正確的值。

除此之外,爲什麼你重寫getters?

+0

我不重寫他們只是Netbeans在側邊欄中給出警告,他們是可覆蓋的。 – csss 2012-03-24 14:11:47

+1

如果你沒有壓倒他們(也不打算)使他們成爲'final'。 – emory 2012-03-24 14:47:49

相關問題