3

我在一个类中有一个成员变量,我想确保在构造函数中设置它之后没有任何改变。所以,它看起来像这样:

public class MyClass
{
    private String myVar = null;

    public MyClass(DataObj dataObj)
    {
        myVar = dataObj.getFinalVarValue();
        //at this point I don't want anything to be able change the value of myVar
    }

    ....
}

我的第一个想法是看到我可以将final修饰符添加到变量中,但是编译器抱怨为最终字段赋值。有可能做到这一点吗?

4

3 回答 3

14

编译器抱怨(在构造函数中),因为您已经通过编写提供了初始化

private String myVar = null;

删除“ = null”部分。在构造函数中添加final并赋值。

public class MyClass
{
    private final String myVar;

    public MyClass(DataObj dataObj)
    {
        myVar = dataObj.getFinalVarValue(); // the only assignment/init happens here.
    }

    ....
}
于 2012-06-20T14:58:54.090 回答
1

制作它private,然后不包括二传手。只要您从不在类方法中更改它,它就是不可变的。

于 2012-06-20T14:56:18.237 回答
-1

String objects are already immutable. So adding the private final modificator is enough.

于 2012-06-20T15:00:27.400 回答