涉及最终字段的setter方法的问题

时间:2015-04-02 17:31:01

标签: java

在我的班级中,三个实例变量都是最终的。但是,当我尝试在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;
    }

}

4 个答案:

答案 0 :(得分:2)

如果字段为final,则只能在变量声明或构造函数中初始化它们。对于final字段,Setter方法毫无意义。

您应该分析您的代码并确定字段是否确实是最终的,如果是这种情况,则丢弃setter方法。如果您确实需要创建setter,则必须删除final修饰符。

答案 1 :(得分:0)

您不应该为最终实例变量设置setter,因为您无法设置它们。要么使你的变量不是最终的,要么删除setter。

答案 2 :(得分:0)

你只能使用getter方法,如果最终没有使用setter方法。如果想要提供制定者,就不会让他们成为最终的。

答案 3 :(得分:0)

一旦你创建了一个变量或引用final,你就不允许改变它,如果你试图在java中重新初始化最终变量,编译器会验证这一点并引发编译错误。

在你的情况下,由于变量的先前最终声明,mutator和accessor(set / get)方法是无用的。