【发布时间】:2015-09-18 21:47:52
【问题描述】:
我有几个这样的课程:
public class A {
private String foo;
public A(String f) {
foo = f; // I want foo to be final based on the subclass instance
}
}
public class B extends A {
private static final String FOO = "foo1";
public B() {
super(FOO);
}
}
public class C extends A {
private static final String = "foo2";
public C() {
super(FOO);
}
}
我想要的是当我在 B 类型上创建一个对象时,我不希望 A 中的 String 可以更改。 foo = f 只是分配一个引用,但我希望 foo 成为相同的最终对象 FOO。我该怎么做?
【问题讨论】:
-
您误解了引用和可变性。
String是不可变的。 -
我想保证 foo 也是 "foo1" 或 "foo2" 并且没有人可以改变它。
-
那么就让它
final。另外,请考虑使用枚举。 -
如果您希望字段
foo成为最终字段,请声明为:private final String foo;
标签: java string object static final