我想限制沒有。類的直接實例(用Java語言)對n說,即在任何時候,不超過n個該類的直接對象存在於內存中。但是沒有這樣的限制。間接對象,比如這個類的任何子類。有沒有辦法在Java中實現這一點?限制編號。在Java中的類的實例
回答
你可以這樣做:
static final AtomicInteger count = new AtomicInteger();
// in your parent constructor.
if (getClass() == Parent.class && count.incrementAndGet() >= LIMIT)
throw new IllegalStateException();
這不包含已發佈的實例 –
我認爲這在主構造函數中,並且重寫主類中的finalize方法應該可行。謝謝。 –
使用工廠設計模式,如果您的實例超出您的限制,則拋出異常。下面
http://www.oodesign.com/factory-pattern.html
是一個粗略的樣本實現。
public class AnyClass {
private static final int limit_ = 8;
private static int count = 0;
private AnyClass() {}
public static synchronized AnyClass getInstance() {
if (count < limit_) {
AnyClass anyClass = new AnyClass();
count++;
return anyClass;
}
return null;
}
}
的Java本身不提供這種可能性。
我認爲你可以管理自己的情況與一個池工廠或直接在類的構造函數。 在構造函數中,如果INSTANCES> MAX_LIMIT,則檢查靜態計數器INSTANCES(定義爲類中的私有數字),然後引發異常。
這不包含已發佈的實例 –
我認爲這樣做是一個壞主意(不知道你的使用情況),但反正...
你可以把一些代碼在類的構造函數計算所有實例。如果需要忽略子類的實例,請檢查getClass()
返回的值。
要知道何時發佈實例,可以使用weak references和WeakHashMap來估計仍在使用的實例數。實際使用的實例數量可能會更少,因爲垃圾回收會在不可預知的時間移除實例。對於確切的數字,當你知道一個實例將不再被使用時,你需要明確地調用一些方法。
- 1. 如何限制PHP中的類實例?
- 2. 如何限制C++或JAVA中類的實例數量?
- 3. 將實例方法的參數限制爲實例的類型
- 4. 無法實例類型的實例在Java中的Weka類
- 5. java限制某些類的反編譯
- 6. 在java中的匿名類的限制?
- 7. AdMob實例限制
- 8. 限制輸入類型編號
- 9. 限制no。 Windows服務中的實例
- 10. 如何限制實例在AWS中使用IAM服務啓動實例類型
- 11. 編程將類的實例綁定到限定符在春天
- 12. Azure實例限制和大小限制
- 13. Java的比較類實例
- 14. Java類的單個實例
- 15. 爲什麼在Java中的類實例中返回一個類實例?
- 16. 對於同一類別的不同實例的Java方法限制
- 17. Java:我怎樣才能從jmx獲得具體的類的實例編號
- 18. 包類的複製實例
- 19. 編程確定所述編譯類型的Java實例
- 20. 實例搜索限制
- 21. 限制JMS目標實例
- 22. Pygame - 精靈限制實例
- 23. Bluemix服務實例限制
- 24. Java類實例化
- 25. 類實例化Java
- 26. Java類實例化
- 27. 在Java中,我可以創建「基於」超類實例的子類實例嗎?
- 28. 休眠條件限制由屬於限制類的實例對象
- 29. 從限制類對象實例的數量給定的數字
- 30. 找到一個類的第一個實例的編號
很想知道這種需求的商業案例。 – Vikdor
是的,非常好奇,擔心你爲什麼要這樣做。 Java不是爲此設計的。我可以想到的這兩種方法都可以讓你計算何時發佈實例,但都非常不鼓勵。 – Dunes
我想知道是否可以通過啓動jvisualvm來創建一個特殊的插件來計算實例......這可能是一個愚蠢的想法,但技術可行嗎? –