3

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

4

4 回答 4

4

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

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;
    }
}
于 2012-09-23T12:01:52.990 回答
0

你可以做:

static final AtomicInteger count = new AtomicInteger();

// in your parent constructor.
if (getClass() == Parent.class && count.incrementAndGet() >= LIMIT)
   throw new IllegalStateException();
于 2012-09-23T12:04:51.193 回答
0

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

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

于 2012-09-23T12:05:44.597 回答
0

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

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

要知道实例何时被释放,您可以使用弱引用WeakHashMap来估计仍在使用的实例数。实际使用的实例数可能会更少,因为垃圾收集会在不可预测的时间删除实例。对于一个确切的数字,当您知道不再使用某个实例时,您需要显式调用某个方法。

于 2012-09-23T12:41:19.727 回答