如何将1个setter用于多个实例变量

时间:2017-04-12 08:24:26

标签: java getter-setter instance-variables

所以,我试图为一个构造函数的多个实例变量创建一个setter方法。我已经用这种方式制作了一个吸气剂:

public int getQuiz(int num) {

    int quiz = -1;
    int[] tempArray = {this.qz1, this.qz2, this.qz3, this.qz4, this.qz5};

    if(num != 0) {
        quiz = tempArray[num - 1];
    }
    else quiz = tempArray[num];

    return quiz;
}

这里的方法在其参数中有一个测验(qz)变量的数量,该变量的值应该返回(当然,setter会有两个参数:int num和int score)。该方法适用于1,但如果我忘记了,如果我要求测验0,我不想要错误,所以这就是if else的目的。

但是,这种方法对setter不起作用,因为数组只包含实例变量的,因此对数组的更改不会投影到实例变量中。我知道这可以用几个if语句完成,我只是想找一个更优雅的解决方案,如果有的话。

这是构造函数和实例变量:

private String Name;
private int qz1, qz2, qz3, qz4, qz5;

Student(String Name, int qz1, int qz2, int qz3, int qz4, int qz5) {
    this.Name = Name;
    this.qz1 = qz1;
    this.qz2 = qz2;
    this.qz3 = qz3;
    this.qz4 = qz4;
    this.qz5 = qz5;
}

如果您认为在getter方法中可以做得更好,请告诉我。

感谢您的回答!

3 个答案:

答案 0 :(得分:0)

我建议创建一个int数组来存储变量,而不是: private int qz1,qz2,.... 做

private int [] quizValues;

然后,您可以获得测验的值:

public int getQuizValue(int storePositionOfQuiz) {
  // check for outOfBounds!
  return this.quizValues[storePositionOfQuiz];
}

如果需要,可以使用int-array作为参数

初始化测验值
public void setQuizValues(int [] newValues) {
  this.quizValues = newValues;
}

答案 1 :(得分:0)

如果你有像int qz1, qz2, qz3, qz4, qz5;这样的变量,那么通常最好将它们作为列表或数组,就像你在getter中所做的那样。正如您所说,问题是数组中设置的值不会传输到原始整数变量。但是为什么不在类本身中使用数组,而不是那些不同的整数变量?这使得你可以在getter和setter(以及构造函数和可能的其他几个地方使用数组,例如hashCodetoStringequals)。

private int[] quizArray = new int[5]; // set values in constructor

public int getQuiz(int num) {
    try {
        return quizArray[num];
    } catch (ArrayIndexOutOfBoundsException e) {
        return -1; // or raise exception
    }
}

public boolean getQuiz(int num, int value) {
    try {
        quizArray[num] = value;
        return true;
    } catch (ArrayIndexOutOfBoundsException e) {
        return false; // or raise exception
    }
}

答案 2 :(得分:0)

有些事情,我想指出:

    你所描述的
  1. getQuiz()方法并不完全是一个吸气剂。以这种方式存在它是好的。只是不要把它称为吸气剂。

  2. 不是在tempArray方法中使用getQuiz(),为什么不将它用作类变量(通过将其重命名为quizzes?这会减少工作量声明诸如qz1az2,...

  3. 之类的变量
  4. 而且,现在,您还可以添加setQuiz(int index, int value)方法,以实现setter的目的。