限制没有。 Java中的类实例

时间:2012-09-23 11:59:28

标签: java subclass multiple-instances

我想限制不。一个类的直接实例(在Java中)对n说,即在任何时候,不超过n个类的直接对象存在于存储器中。但是没有这样的限制。间接对象​​,例如此类的任何子类。有没有办法在Java中实现这个目标?

4 个答案:

答案 0 :(得分:3)

使用工厂设计模式,如果您的实例超出限制,则抛出异常。

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;
    }
}

答案 1 :(得分:0)

你可以这样做:

static final AtomicInteger count = new AtomicInteger();

// in your parent constructor.
if (getClass() == Parent.class && count.incrementAndGet() >= LIMIT)
   throw new IllegalStateException();

答案 2 :(得分:0)

Java本身并没有提供这种可能性。

我认为您可以使用池化工厂或直接在类构造函数中管理自己的情况。 在构造函数中,如果INSTANCES&gt;,则检查静态计数器INSTANCES(在您的类中定义为私有数字)。 MAX_LIMIT然后你抛出一个异常。

答案 3 :(得分:0)

我认为这样做是个坏主意(不知道你的用例),但无论如何......

您可以通过在该类的构造函数中放入一些代码来计算所有实例。如果需要忽略子类的实例,请检查getClass()返回的值。

要知道实例何时发布,您可以使用weak referencesWeakHashMap来估算仍在使用的实例数。实际使用的实例数可能更低,因为垃圾收集会在不可预测的时间删除实例。对于确切的数字,当您知道不再使用实例时,您需要显式调用某个方法。