java - 限制使用带参数的构造函数创建的实例数量

标签 java object instance

如何让我的程序将以下实例创建限制为四个,以便当我尝试创建第五所学校时,它会显示错误消息“学校无法注册达到最大值”。 一如既往的感谢

public class Driver {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Header h1 = new Header();
        h1.schoolHeader();
        School s1 = new School("Pascoe Vale High School", "101");
        School s2 = new School("North Melbourne Primary School", "102");
        School s3 = new School("St Aloysuis College", "103");
        School s4 = new School("Coburg High School", "104");
        School s5 = new School("Chuka Nwobi High School", "105");
    }
}

class School {
    public static int objCount = 0;
    private static String regId;
    private String name;

    School(String name, String regId) {
        this.name = name;
        this.regId = regId;
        System.out.println("*** Successfully registered " + getName());
        objCount++;
    }

    public void registerHeader() {
        System.out.println("--- Registering Participating Schools---");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getRegId() {
        return regId;
    }
    public void setRegId(String regId) {
        this.regId = regId;
    }
}

最佳答案

您要求的示例代码:

static final int ALLOWED_COUNT = 4;

public School(String name, String regId) {
    if (objCount >= ALLOWED_COUNT) {
        throw new TooManySchoolsException("Only " + ALLOWED_COUNT + " schools allowed!");
    }
    this.name = name;
    this.regId = regId;
    System.out.println("*** Successfully registered " + getName());
    objCount++;
}

老实说,这样做并不是一个好主意。更好的是允许创建无限数量的 School 对象,并有一个单独的 SchoolRegistry 类来跟踪注册的学校数量。

class SchoolRegistry {
    static final int MAX_SCHOOLS = 4;
    private List<School> schools = new ArrayList<>();
    public void register(School s) {
        if (schools.size() > MAX_SCHOOLS) throw new TooManySchoolsException();
        schools.add(s);
    }
}

关于java - 限制使用带参数的构造函数创建的实例数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46037506/

相关文章:

Java SSL 连接返回先前的回复

Java 类/对象转换何时适用

c++ - C++中的实例化

C++ 无法修改类的实例

java - 没有打印任何内容

java - 如何在Java中读取数字的每一位数字

java - 确保不同类型的泛型

python - 对象与引用

javascript - 方法可以返回一个新对象吗?

python - 如何跟踪类实例?