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

Java 使用getter方法在构造函数中初始化的变量,java,netbeans,getter,Java,Netbeans,Getter,我正在努力自学Java,我正在制作一个大家都知道的游戏,这是一种垄断 我一直在寻找我的答案,但找不到,所以就在这里 我有一个类Field,它有两个变量fieldnumber和fieldname。我的想法是创建一个带有数字的字段,以便程序知道玩家在哪里(现在不相关)。 程序为字段创建字段和名称后,字段名和字段号仅应可读(表示不可编辑) 我需要知道如何将这两个变量初始化为构造函数,并使变量仅为“getters”,以便以后不能更改它们 (obs:类字段只是一个子类,稍后我需要使用主类中的数据) 我有点

我正在努力自学Java,我正在制作一个大家都知道的游戏,这是一种垄断

我一直在寻找我的答案,但找不到,所以就在这里

我有一个类
Field
,它有两个变量
fieldnumber
fieldname
。我的想法是创建一个带有数字的字段,以便程序知道玩家在哪里(现在不相关)。 程序为字段创建字段和名称后,
字段名
字段号
仅应可读(表示不可编辑)

我需要知道如何将这两个变量初始化为构造函数,并使变量仅为“getters”,以便以后不能更改它们

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


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

声明字段
final
,在构造函数中分配它们,不要编写setter

如果属性的数量增加,您可以考虑使用以避免具有多个参数的构造函数。

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;
  }
}

声明字段
final
,在构造函数中分配它们,不要编写setter

如果属性的数量增加,您可以考虑使用以避免具有多个参数的构造函数。

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;
  }
}
  • “getter”是返回字段值的方法
  • “setter”是一种通常只接受一个参数的方法,用于设置字段的值(可能在一些验证之后)
  • 为了实现良好的封装,通常只能在上下文允许的最大范围内访问实例字段(通常是带有getter/setter的
    private
    字段,有时是
    protected
    或需要继承或更复杂设置时的package protected字段)
  • 标有
    final
    非访问修饰符的字段只能分配一次
在您的情况下,如果字段的作用域在类的实例中,但一旦分配就永远不会更改,则可以标记它们
final
,并在构造函数或实例语句中分配它们(无setter)

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

  • “getter”是返回字段值的方法
  • “setter”是一种通常只接受一个参数的方法,用于设置字段的值(可能在一些验证之后)
  • 为了实现良好的封装,通常只能在上下文允许的最大范围内访问实例字段(通常是带有getter/setter的
    private
    字段,有时是
    protected
    或需要继承或更复杂设置时的package protected字段)
  • 标有
    final
    非访问修饰符的字段只能分配一次
在您的情况下,如果字段的作用域在类的实例中,但一旦分配就永远不会更改,则可以标记它们
final
,并在构造函数或实例语句中分配它们(无setter)


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

我建议将这两个属性设置为private(不可访问),在创建实例时初始化它们,您可以使用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);
}
}

我建议将这两个属性设置为private(不可访问),在创建实例时初始化它们,您可以使用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);
}
}

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

class Example {

    private int value;

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

}
在上面的示例中,变量值仅在类示例中可见;任何其他类都无法获取该变量。当您希望没有其他类能够更改其值时,这非常有用。但是,要从对象获取值,请使用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变量”的方法。

getter表示返回对象存储的值的方法。变量作为getter并不意味着什么。getter通常用于获取声明为私有的变量;也就是说,从类外部看不到的变量。请参见示例:

class Example {

    private int value;

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

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

class Example {

    private int value;

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

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

}
这里的方法getValue()是一个getter。无法更改该值,因为它是私有的,