将 class 限制为 Java 中一定数量的对象

Restricting a class to a certain amount of objects in Java

请问有没有办法限制某个class制作超过一定数量的实例。如果有可能让编译器 ("Eclipse") 在该行下划线,当您尝试创建另一个实例时(就像代码中的错误),或者类似的东西?

我要向那些说这是个坏主意的人澄清一下,我正在制作一个国际象棋游戏,所以我需要它不能制作超过一定数量的棋子。

您可以简单地创建所需数量的对象 - 例如通过在循环中实例化您的 class 然后设置一个由构造函数检查的标志,以便在尝试创建时抛出异常多一个。您可以将构造函数设为私有并使用静态方法来生成您的实例。

Eclipse 无法在编译时执行此操作,因为它无法判断一段代码将执行多少次,因此无法判断创建了多少个实例。

但是您可以设计您的class只创建给定数量的实例,并且不可能创建更多实例。例如:

public class Limited {
    public static final List<Limited> ALL_INSTANCES = 
        Collections.unmodifiableList(createInstances());

    private int id;

    private static List<Limited> createInstances() {
        List<Limited> result = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            result.add(new Limited(i));
        }
    }

    private Limited(int id) {
        this.id = id;
    }
}

由于构造函数是私有的,因此只有 ALL_INSTANCES 中可用的 10 个实例。

也就是说,这不一定是个好主意。假设您正在创建一个国际象棋游戏。所以按照你的逻辑,你不应该创建超过 2 个 King 实例。如果您的应用一次处理 10 个游戏怎么办?你真的想要最多 2 个国王,还是只希望每个 ChessGame 实例都有一个黑色和一个白色的国王?也许您只需要

public class ChessGame {
    private King blackKing = new King(BLACK);
    private King whiteKing = new King(WHITE);
    ...
}