如何创建只能从其类中修改的公共静态变量?

时间:2015-08-11 09:30:29

标签: java class static member public

我有两个班级:

$("h2#Panel").next("fieldset").find('.FormItem:nth-child(2) textarea').css("background-color", "red");

问:我可以只从他的班级制作可修改的成员,因为其他班级会不变吗?

3 个答案:

答案 0 :(得分:2)

不,public访问修饰符基本上允许您从代码库中的任何位置修改引用的值。

你可以做的是根据你的特定需要拥有private或更少限制的访问修饰符,然后实现一个getter,但没有setter。

在后一种情况下,请记住添加一些逻辑以防止可变对象(如集合)发生变异。

示例

class Foo {
    // primitive, immutable
    private int theInt = 42;
    public int getTheInt() {
        return theInt;
    }
    // Object, immutable
    private String theString = "42";
    public String getTheString() {
        return theString;
    }
    // mutable!
    private StringBuilder theSB = new StringBuilder("42");
    public StringBuilder getTheSB() {
        // wrapping around
        return new StringBuilder(theSB);
    }
    // mutable!
    // java 7+ diamond syntax here
    private Map<String, String> theMap = new HashMap<>();
    {
        theMap.put("the answer is", "42");
    }
    public Map<String, String> getTheMap() {
        // will throw UnsupportedOperationException if you 
        // attempt to mutate through the getter
        return Collections.unmodifiableMap(theMap);
    }
    // etc.
}

答案 1 :(得分:1)

只需删除setter并生成变量private即可。然后其他类只能读取stetted的值。

public class a {
 private static int var=2;
 public static int getVar() {
    return var; 
 }
}

但是当你来到Java reflection时,没有这样的保护。

答案 2 :(得分:0)

答案是你不能只修改一个公共静态变量,只能修改它的类私有并且只有公共getter,或者你可以添加setter 私人