在我的班级中,三个实例变量都是最终的。但是,当我尝试在setter方法中执行this.inputsRelated = inputsRelated
之类的操作时,我得到一个可理解的错误,即无法分配最终字段。但是setter方法中的方法/我应该如何处理public void setInputsRelated(boolean inputsRelated)
和public void setExpected(int expected)
方法呢?提前谢谢!
public class ExceptionLogicParameters extends RuntimeException {
public final boolean inputsRelated;
public final int expected;
public final int found;
public ExceptionLogicParameters(boolean inputsRelated, int expected, int found)
{
this.inputsRelated = inputsRelated;
this.expected = expected;
this.found = found;
}
@Override
public String toString()
{
return "Get the the hell out of here!";
}
public boolean getInputsRelated()
{
return this.inputsRelated;
}
public int getExpected()
{
return this.expected;
}
public int getFound()
{
return this.found;
}
public void setInputsRelated(boolean inputsRelated)
{
this.inputsRelated = inputsRelated;
}
public void setExpected(int expected)
{
this.expected = expected;
}
}
答案 0 :(得分:2)
如果字段为final
,则只能在变量声明或构造函数中初始化它们。对于final
字段,Setter方法毫无意义。
您应该分析您的代码并确定字段是否确实是最终的,如果是这种情况,则丢弃setter方法。如果您确实需要创建setter,则必须删除final
修饰符。
答案 1 :(得分:0)
您不应该为最终实例变量设置setter,因为您无法设置它们。要么使你的变量不是最终的,要么删除setter。
答案 2 :(得分:0)
你只能使用getter方法,如果最终没有使用setter方法。如果想要提供制定者,就不会让他们成为最终的。
答案 3 :(得分:0)
一旦你创建了一个变量或引用final,你就不允许改变它,如果你试图在java中重新初始化最终变量,编译器会验证这一点并引发编译错误。
在你的情况下,由于变量的先前最终声明,mutator和accessor(set / get)方法是无用的。