我正在使用域,視圖和控制器。每個包含他們自己的類。防止其他類的類實例化
該域包含許多不應該在域外的類中實例化的類。我的印象是默認訪問修飾符會幫助我。使我的領域類的構造函數包可見。
在導入正確的package.class文件後,任何類仍然可以使用構造函數。
我該如何防止這種情況發生?
我正在使用域,視圖和控制器。每個包含他們自己的類。防止其他類的類實例化
該域包含許多不應該在域外的類中實例化的類。我的印象是默認訪問修飾符會幫助我。使我的領域類的構造函數包可見。
在導入正確的package.class文件後,任何類仍然可以使用構造函數。
我該如何防止這種情況發生?
當你說'發現任何類在導入正確的package.class文件後仍然可以使用構造函數。'我想你正在談論反思。 反射是一個強大的概念,允許類的任意實例化,即使它們只提供私有構造函數。 沒有辦法阻止某人使用反射來實例化你的類。類或構造函數修飾符(如private或protected)可以繞過使用反射。
如果你想從外部類控制類的實例,那麼你可以創建它的構造private
像 -
class A{
private A(){
// do some thing
}
public static getInstance(){
}
}
現在,現在的A類的實例可以創建表格之類的外。但是如果外界真的需要類的一個實例,那麼他們可以使用靜態方法getInstance()
。這種構造可以防止外界使用new
關鍵字創建類的實例。
希望它會幫助。
謝謝。
非常豐富,謝謝! – drx 2015-04-04 17:50:56
您的課程是否宣佈爲公開? https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html _「一個類可以使用修飾符public聲明,在這種情況下,該類對所有類都是可見的。類沒有修飾符(默認,也稱爲包私有),它只在它自己的包中可見「_ – Vahx 2015-04-04 17:35:10
這也許是有用的http://stackoverflow.com/questions/215497/in-java-whats- public-default-protected-and-private之間的區別 – Vahx 2015-04-04 17:37:46