java - 在无参数构造函数中绕过最大数组大小

标签 java arrays list arraylist constructor

我试图在添加新号码时通过默认设置删除限制。我希望仍然对初始化时设置的全参数构造函数有限制,但对无参数和 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/

相关文章:

java - 将 Java 正则表达式捕获组替换为其自身的一部分

java - Maven NatTable 清理+安装失败

java - Android LocationManager,粗略数据和电池消耗

ios - 每次将 child 添加到 firebase 数据库时都会调用 viewDidLoad

java - 234324.32423.234234.324234 是有效的 InetAddress 吗?

php - 将mysql while循环数据保存到数组中,然后保存到数据库中

java - 通过控制台传递数组元素来查找数字的平均值

python - 比较 2 个列表列表的内容

java - 在Java中的列表中的两个项目之间插入一个项目

python - 复制列表中的元素