将字符串分配给最终字符串

时间:2015-09-18 21:47:53

标签: java string object static final

我有几个这样的课程:

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类型上创建对象时,我不希望String中的A可以更改。 foo = f只是指定了引用,但我希望foo成为同一个最终对象FOO。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

看起来你根本不想要一个字段,而是你可以有一个方法。

interface A {
    String foo(); // the implementation depends on the sub-class.
}

class B implements A {
    public String foo() { return "foo1"; }
}

class C implements A {
    public String foo() { return "foo2"; }
}

答案 1 :(得分:0)

这可能不是最好的设计,但你想要做的是初始化一个最终的字符串。

public class A {
    private final String foo;

    public A(String f) {
        foo = f; 
    }
}

最终变量只能初始化一次,因此您可以在构造函数中初始化它。但是在你的情况下没有意义,因为你的子类无法访问foo,因为它是私有的。有关所有可用的Java可见性修饰符,请参阅here