使用getter方法在构造函数中初始化的变量

时间:2014-10-24 10:42:48

标签: java netbeans getter

我正在尝试通过自己学习Java,我正在制作一个你们都知道的游戏,这就是垄断。

我已经搜索了我的答案但却找不到,所以就在这里。

我有一个班级Field,其中包含两个变量fieldnumberfieldname。我的想法是创建一个带有数字的字段,因此程序知道玩家的位置(现在不相关)。 程序创建字段后,fieldnamefieldnumber 可读(表示不可编辑)字段的名称。

我需要知道如何将这两个变量初始化为构造函数并使变量仅为" getters ",因此以后无法对它们进行更改。

obs :类Field只是一个子类,我需要稍后使用主类中的数据)

我有点困惑,并试图阅读我正在使用的书,但没有运气。

4 个答案:

答案 0 :(得分:2)

声明字段final,在构造函数中指定它们,不要写setter。

如果属性数量增加,您可以考虑使用builder pattern来避免带有许多参数的构造函数。

class Field {
  private final int fieldNumber;
  private final String fieldName;

  public Field(final int fieldNumber, final String fieldName) {
    // you may validate the values here and throw exception in case of non-valid values

    this.fieldNumber = fieldNumber;
    this.fieldName = fieldName;
  }

  public int getFieldNumber() {
    return fieldNumber;
  }

  public String getFieldName() {
    return fieldName;
  }
}

答案 1 :(得分:1)

  • “getter”是一种返回字段值的方法。
  • “setter”是一种通常采用一个参数的方法,设置字段的值(可能在一些验证之后)。
  • 为了获得良好的封装,通常只能在上下文允许的最大范围内访问您的实例字段(通常{get} / setter private字段,有时protected或包继承或更多字段保护字段复杂的设置是必需的)
  • 标有final非访问修饰符的字段只能分配一次

在您的情况下,如果字段在您的类的实例中作用域,但在分配后永远不会更改,您可以将它们标记为final并在构造函数或实例语句中指定它们(无设置器)。 / p>

如果它们没有绑定到实例,而是绑定到类,那么您可以将它们标记为常量(static final)并立即分配它们(如果它们可以安全地将它们设置为public是不可变的 - 即String s或原语

答案 2 :(得分:1)

我建议将两个属性设置为私有(不可访问),在创建实例时初始化它们,并且可以使用getter获取它们的值:

class Field{

private String fieldname;
private int fieldnumber;

public Field (String fieldname, int fieldnumber)
{
    this.fieldname = fieldname;
    this.fieldnumber= fieldnumber;
}

public String getFieldname(){
    return fieldname;
}
public int getFieldnumber(){
    return fieldnumber;
}
public String toString(){
    return fieldnumber+ "  " +fieldname;
}
public boolean equals(Object obj){
   Field field = (Field) obj;
    return (fieldnumber == field.fieldnumber && fieldname.equals(field.fieldname);
}
}

答案 3 :(得分:1)

Getter表示返回对象存储的值的方法。作为吸气剂的变量并不意味着什么。 getter通常用于获取声明为private的变量;也就是说,从类外部“不可见”的变量。参见示例:

class Example {

    private int value;

    public Example(int valueToBeSet) {
        this.value = valueToBeSet;
    }

}

在上面的例子中,变量值只能从类Example中看到;任何其他类都无法获得该变量。当您希望没有其他类能够更改其值时,这非常有用。但是,要从对象获取值,请使用getter:

class Example {

    private int value;

    public Example(int valueToBeSet) {
        this.value = valueToBeSet;
    }

    public int getValue() {
        return this.value;
    }

}

这里方法getValue()是一个getter。您无法更改该值,因为它是私有的,但您可以调用方法getValue()并获取值,因为该方法是公共的。

分配变量值的其他方法是,能够获取其值,但无法更改它,是使用final关键字:

class Example {

    public final int value;

    public Example(int valueToBeSet) {
        this.value = valueToBeSet;
    }

}

这样,变量的值只能在构造函数中设置一次,而不能再次设置。但是,您仍然可以从课外获取价值,因为它是公开的。这通常是做事的好方法,但它有其缺点;也就是说,正如我所解释的那样,你不能再改变它了,并且为了得到一个具有不同值的对象,你必须完全创建一个新对象。这是你最接近“getter变量”的地方。