在没有arg构造函数中绕过最大数组大小

时间:2017-11-22 06:49:27

标签: java arrays list arraylist constructor

我想在添加新号码时通过默认设置删除限制。我希望仍然对all-arg构造函数有一个限制,它在初始化时设置,但不在no-arg和1-arg构造函数上设置。

public class SMSDataModelList implements SMSDataModelInterface, Serializable {

    List<String> list = new ArrayList<String>();
    //List<String> list = new LinkedList<String>();

    private static final long serialVersionUID = 1L;
    private static final int DEFAULT_MAX_NUM_PHONE_NUMBERS = 20;

    public static final String FULL = "FULL";
    public static final String DUPLICATE = "DUPLICATE";

    private String message;     //The SMS message
    private String[] phoneNumbers;      //The collection of phone numbers
    private int maxNumPhoneNumbers;     //Max numbers in list

    public SMSDataModelList(String message) {
        this(message, DEFAULT_MAX_NUM_PHONE_NUMBERS);
    }   

    public SMSDataModelList() {
        this("", DEFAULT_MAX_NUM_PHONE_NUMBERS);
    }

    public SMSDataModelList(String initialMessage, int maxNumPhoneNumbers) {
        this.message = initialMessage;
        this.maxNumPhoneNumbers = maxNumPhoneNumbers;
        this.phoneNumbers = new String[maxNumPhoneNumbers];
    }

    @Override
    public String addPhoneNumber(String newPhoneNumber) {
        String result;

        if (list.size() == maxNumPhoneNumbers) {
            result = FULL;

        } else {
            boolean exists;
            exists = findPhoneNumberIndex(newPhoneNumber) != -1;

            if (exists) {
                result = DUPLICATE;
            } else {
                list.add(newPhoneNumber);
                result = newPhoneNumber;
            }
        }

        return result;
    }       
}

我尝试将此添加到addPhoneNumber方法:

if (DEFAULT_MAX_NUM_PHONE_NUMBERS == 20) {
    maxNumPhoneNumbers = (list.size() + 1);
}

我认为这对于测试no-arg和1-arg构造函数很有效,但是当它涉及到all-arg时,我注意到它也允许数组大小增加。我现在可以看出为什么这是错的,但不确定我是否走在正确的轨道上。

我是否真的可以使no-arg和1-arg构造函数具有静态默认值的无限数组大小?

1 个答案:

答案 0 :(得分:0)

如果我明白你的意思,你的构造函数中似乎需要另一个标志,以表明手机的数量是否应限制在最初的最大数量:

public SMSDataModelList(String message) {
    this(message, DEFAULT_MAX_NUM_PHONE_NUMBERS, false);
}   

public SMSDataModelList() {
    this("", DEFAULT_MAX_NUM_PHONE_NUMBERS, false);
}

public SMSDataModelList(String initialMessage, int maxNumPhoneNumbers) {
    this(initialMessage, maxNumPhoneNumbers, true);
}

public SMSDataModelList(String initialMessage, int maxNumPhoneNumbers, boolean limited) {
    this.message = initialMessage;
    this.maxNumPhoneNumbers = maxNumPhoneNumbers;
    this.phoneNumbers = new String[maxNumPhoneNumbers];
    this.limited = limited;
}

您可以使用limited标志来确定phoneNumbers数组在变满时是否可以增加 - 您需要向检查该标志的addPhoneNumber添加逻辑。 / p>

P.S。我刚刚注意到你的构造函数和实例变量与addPhoneNumber方法不匹配。构造函数初始化数组以存储电话号码,而addPhoneNumber方法使用ArrayList。你应该决定你想要使用哪两个。 ArrayList会更容易,因为每次现有数组变满时都不必重新分配新数组。