我试图在添加新号码时通过默认设置删除限制。我希望仍然对初始化时设置的全参数构造函数有限制,但对无参数和 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);
}
我认为这对于测试无参数和 1-arg 构造函数效果很好,但是当涉及到全参数时,我注意到它也允许数组大小增加。我现在明白为什么这是错误的,但不确定我是否走在正确的道路上。
我真的可以让无参数和 1-arg 构造函数具有无限的数组大小和静态默认值吗?
最佳答案
如果我理解你的意思,似乎你需要在构造函数中使用另一个标志,以指示电话数量是否应限制为初始最大数量:
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
添加逻辑来检查该标志。
附注我刚刚注意到您的构造函数和实例变量与 addPhoneNumber
方法不匹配。构造函数初始化一个数组来存储电话号码,而 addPhoneNumber
方法使用 ArrayList
。您应该决定使用两者中的哪一个。 ArrayList
会更容易,因为您不必在每次现有数组变满时重新分配新数组。
关于java - 在无参数构造函数中绕过最大数组大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47428441/