[英]How to Prevent instantiation of concrete classes?
可以說我有一個Record
接口,可以有N個具體的實現類,例如。 PropertyRecords
, LoanRecords
等如何確保客戶端使用new關鍵字創建的這N個類中沒有對象?
如果我只有一個子類,這很容易;我可以將所有構造函數包設為私有;這樣我就可以在同一包中編寫一個Factory
類,該類將具有負責創建實例的方法。 Factory
能夠創建單個接口或抽象類的多個實現。
希望我能正確表達自己的意見。請詢問是否需要任何說明。
謝謝。
不知道為什么要這么做,但是Factory
類可以使用反射來創建如下實例:
public class RecordFactory {
public Record newInstance(Class<? extends Record> klass, Object... args) {
Constructor[] ctors = klass.getDeclaredConstructors();
// find the right constructor here..
return ctor.newInstance(args);
}
}
然后,您的客戶端可以創建如下實例:
RecordFactory.newInstance(Loan.class, ...);
我不確定我是否理解您要實現的目標(對此沒有評論),但是我的想法是:
如果您真的想按照描述來實現它(同樣,以我理解正確的假設為前提),則應該可以執行以下操作:
public class Record { private static final int MAX_INSTANCES = 20; private static volatile int instanceCounter = 0; private Record() { if (instanceCounter >= MAX_INSTANCES) throw new RuntimeException("max instances exceeded"); instanceCounter ++; } }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.