如何强制我的数组为特定长度 - Java

How to force my array to be a specific length - Java

我有一个由 class QAData 描述的对象。它包括以下属性: 用于保存提出问题的文本的字符串。 恰好包含 4 个可能答案的字符串数组。 布尔数组恰好包含与答案对应的 4 right/wrong 个选项。 正好包含 4 个选项的布尔值数组,指示用户是否选择了一个选项。

我的问题是如何在下面的初始 class 中强制数组的长度为 4?

public class QAData {
    private String questionText;
    private String[] answerText = new String[4];
    private Boolean[] correctAnswer = new Boolean[4];
    private Boolean[] selectedAnswer = new Boolean[4];

    QAData(String questionText, String[] answerText, Boolean[] correctAnswer, Boolean[] selectedAnswer){
        this.questionText = questionText;
        this.answerText = answerText;
        this.correctAnswer = correctAnswer;
        this.selectedAnswer = selectedAnswer;
    }

    public String getQuestionText(){
        return this.questionText;
    }

    public String[] getAnswerText(){
        return answerText;
    }

    public Boolean[] getCorrectAnswer(){
        return correctAnswer;
    }

    public Boolean[] getSelectedAnswer(){
        return selectedAnswer;
    }

    public void setSelectedAnswer(Boolean[] selectedAnswer){
        this.selectedAnswer = selectedAnswer;
    }
}

其实这里的字段实例化是没用的:

private String[] answerText = new String[4];
private Boolean[] correctAnswer = new Boolean[4];
private Boolean[] selectedAnswer = new Boolean[4];

因为这些将在构造函数中被覆盖:

QAData(String questionText, String[] answerText, Boolean[] correctAnswer, Boolean[] selectedAnswer){
    this.questionText = questionText;
    this.answerText = answerText;
    this.correctAnswer = correctAnswer;
    this.selectedAnswer = selectedAnswer;
}

控制数组长度的唯一方法是在构造函数和设置数组的方法中进行检查。 请注意,在 class 中提供的可变方法越少,越容易保证一致性规则

下面是一个在构造函数中保证数组长度的例子:

QAData(String questionText, String[] answerText, Boolean[] correctAnswer, Boolean[] selectedAnswer){
    assertLengthIs4(answerText, correctAnswer, selectedAnswer);       
    this.questionText = questionText;
    this.answerText = answerText;
    this.correctAnswer = correctAnswer;
    this.selectedAnswer = selectedAnswer;
}

public void assertLengthIs4(Object[]... arrays){
       for (Object[] array : arrays){
           if (array == null || array.length != 4){
               throw new IllegalArgumentException("size should be 4 for all arrays");
           } 
       } 
}

Java 数组 API 提供此功能:

Arrays.copyOf(T[] original, int newLength)

这将 truncate/pad 数组到新的长度。