涉及最终字段的setter方法的问题
问题描述:
在我的三个实例变量中,这些变量都是最终的。但是,当我尝试在setter方法中执行类似this.inputsRelated = inputsRelated
的操作时,我得到一个可理解的错误,它说明最终字段无法分配。但是,设置方法中的方法/我应该如何处理方法public void setInputsRelated(boolean inputsRelated)
和public void setExpected(int expected)
?提前致谢!涉及最终字段的setter方法的问题
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;
}
}
答
如果这些字段是final
,它们只能在变量声明或构造函数中初始化。对于final
字段,安装员方法没有意义。
您应该分析您的代码并确定这些字段是否确实是最终的,如果是这样的话,请丢弃setter方法。如果您确实需要创建setter,则必须删除final
修饰符。
答
你不应该为最终实例变量设置setter,因为你不能设置它们。要么让你的变量不是最终的或者移除setter。
答
您只能使用getter方法,如果最终没有使用setter方法。如果想要提供setter,那么没有必要让他们成为final。
答
一旦你做了一个变量或引用最终你不允许改变它,编译器会验证这一点,并提高编译错误,如果你尝试重新初始化java中的最终变量。
在你的情况下,由于之前的变量最终声明,mutator和accessor(set/get)方法是无用的。
如果这些字段是最终的,则这些方法不应该存在。必须在声明或构造函数中设置最终字段。 – axblount 2015-04-02 17:32:44
如果你想重新分配这些字段的值,为什么使用final? – 2015-04-02 17:33:18
已解决!教授犯了一个错误,最终使实例变量。 – Inferno 2015-04-02 17:49:18