構造函數實例化一個類,爲什麼它具有訪問修飾符?
修飾符可以用來控制對象的構建位置。
有沒有必要聲明構造函數爲私有的情況?
假設你有一個像
class A {
private A(int n) { }
public static A create(int n) {
return new A(n);
}
}
工廠方法,或者你有一個共同的構造應直接調用。
class B {
public B(int n) {
this(n, "");
}
public B(String str) {
this(0, str);
}
private B(int n, String str) { }
}
,或者你有一個Singleton
final class Singleton {
Singleton INSTANCE = new Singleton();
private Singleton() { }
}
但我更喜歡使用enum
具有private
構造。
enum Singleton {
INSTANCE;
}
,或者你有一個實用工具類
final class Utils {
private Utils() { /* don't create one */ }
public static int method(int n) { }
}
但我更喜歡使用一個枚舉在這種情況下
enum Utils {
/* no instances */;
public static int method(int n) { }
}
注:如果您在final
類使用私有構造函數仍然可以使用嵌套類或反射來創建實例。如果您使用enum
,則無法輕鬆/意外地創建實例。
警告:您可以使用Unsafe
注意在enum
構造必須創建一個enum
的情況下private
class BuySell {
BUY(+1), SELL(-1);
private BuySell(int dir) { }
}
你不必讓它private
明確,因爲這是默認值。
@TheLostMind我稱之爲實用程序類,如最後所述。我更喜歡使用具有私有構造函數的'enum'。 –
並使用枚舉將是正確的方式來做到這一點:) – TheLostMind