2012-02-22 35 views
3

我聽過JavaBean的規則,其中第一條和主要規則是,對於每個JavaBean類,顯式的程序員應該提供公共的默認構造函數。 請任何人都可以解釋爲什麼我們需要對JavaBean提供默認的構造函數爲什麼公共構造函數應該在javabean類中提供

UPDATE:

請解釋清楚,爲什麼JVM不會是JavaBean提供默認的構造函數,以及如何JVM上提供默認的構造函數

反應
+0

問題已經存在。 http://stackoverflow.com/q/2291856/713414 – Jayy 2012-02-22 12:03:35

回答

11

我heared的JavaBean的規則,其中第一和主要原則是,對於每一個JavaBean類明確程序員應該提供公共的默認構造函數。請任何人都可以解釋爲什麼我們需要爲JavaBean提供默認構造函數

JavaBean實例是通過反射調用no-arg構造函數創建的。所以有這樣的構造函數。

請解釋清楚,爲什麼JVM不會是JavaBean提供默認的構造函數和JVM上提供默認的構造函數

JVM的提供了一個JavaBean一個默認的構造如何反應,如果你有明確規定沒有構造函數。如果你提供了一個構造函數,除了你用參數定義的參數外,你必須提供一個無參數構造函數。

0

根據我的經驗,這是爲了防止某人添加一個構造函數的參數,從而有效地刪除默認的構造函數。通過顯式實現更不可能發生的默認構造函數。

+0

除非你調用有爭議的構造函數,否則jvm永遠不會調用有爭議的構造函數,即使有爭議的構造函數在類 – developer 2012-02-22 12:22:17

1

我們可能會添加一些其他的構造函數給我們的bean,它們帶有參數,如果我們的類中沒有包含Default構造函數,那麼其他的構造函數會影響它,從而使它不再是有效的bean。

0

這是什麼wikipedaia說Java Bean Wikipedia article

類必須有一個公共的默認構造函數(無參數)。這允許在編輯和激活框架中輕鬆實例化。

其實這是ESAY通過自省來實例化一個類,如果它得到一個默認的構造

getClass().getClassLoader().loadClass("mypackage.myclass").newInstance(); 
+0

-1中定義它不是確切答案,請檢查,我已更新題。 – developer 2012-02-22 12:20:08

0

我懷疑這是對語法和生成的類之間的區別的誤解。

public class Alpha { 
} 

public class Beta { 
    public Beta() {} 
} 

Alpha默認構造函數是隱式的;在Beta它是明確的。根據JavaBean規範,它們都有默認的公共構造函數。

public class Gamma { 
    private final Type t; 
    public Gamma(Type t) { 
    this.t = t; 
    } 
} 

在另一方面,Gamma因爲沒有公共的無參數的構造不符合要求。如果沒有關於如何填充構造函數的上下文,將無法實例化此對象。

相關問題