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

时间:2017-09-04 12:51:57

标签: java object instance

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

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

1 个答案:

答案 0 :(得分:2)

您要求的示例代码:

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