我正在尝试通过自己学习Java,我正在制作一个你们都知道的游戏,这就是垄断。
我已经搜索了我的答案但却找不到,所以就在这里。
我有一个班级Field
,其中包含两个变量fieldnumber
和fieldname
。我的想法是创建一个带有数字的字段,因此程序知道玩家的位置(现在不相关)。
程序创建字段后,fieldname
和fieldnumber
只 可读(表示不可编辑)字段的名称。
我需要知道如何将这两个变量初始化为构造函数并使变量仅为" getters ",因此以后无法对它们进行更改。
( obs :类Field
只是一个子类,我需要稍后使用主类中的数据)
答案 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)
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变量”的地方。