我有两个班级:
$("h2#Panel").next("fieldset").find('.FormItem:nth-child(2) textarea').css("background-color", "red");
问:我可以只从他的班级制作可修改的成员,因为其他班级会不变吗?
答案 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 私人