使用接口在多个类中定义公共变量

时间:2012-08-02 09:04:57

标签: java interface

我有一个示例界面

 public interface SampleVariables {
int var1=0;
int var2=0;
}

我希望在多个类中使用var1和var2我尝试使用

执行此操作
public class InterfaceImplementor  extends Message  implements SampleVariables{

private int var3;

public int getVar1(){
    return var1;
}

public void setVar1(int var1){
    SampleVariables.var1=var1; // ** error here in eclipse which says " remove final modifier of 'var1' " Though I have not defined it as final
}

public int getVar3() {
    return var3;
}

public void setVar3(int var3) {
    this.var3 = var3;
}

}

其中class Message是我尝试使用的预定义类,我不能在Message类中定义var1,var2。

有更好的方法吗?或者我错过了一些非常简单的东西?

4 个答案:

答案 0 :(得分:1)

界面中的所有字段都是隐式静态和最终字段,因此上面是您的警告。有关详细信息,请参阅this SO question

在我看来,你想要一个带有这些变量的基类,但正如你所指出的那样,你不能这样做,因为你是从第三方派生出来的。

我不会从第三方类派生,因为你不控制它的实现。我宁愿创建一个包装它的类,并提供您的附加功能。这使您感到舒适,如果/当第三方课程发生变化时,您可以限制随后进行的更改的范围。

不幸的是,Java不支持mixins,这是您在此尝试实现的目标。

答案 1 :(得分:1)

默认情况下,interface 变量static final,您无法更改其值。你做不到SampleVariables.var1=var1;

你可以做的是

public class InterfaceImplementor  extends Message { // do not implement interface here

private int var3;
private int var1;

public void setVar1(int var1){
    this.var1=var1; // will work
}

并访问interface SampleVariables.var1

的变量

答案 2 :(得分:1)

由于Interface的成员变量是default static, final,所以初始化后你不能再reassign这个值。

Every field declaration in the body of an interface is implicitly public, static, and final. It is permitted to redundantly specify any or all of these modifiers for such fields.

请参阅Java Language Specification

答案 3 :(得分:0)

你应该使用一个抽象类。

示例:

public abstract class AbstractClass {
    protected int var1;
}
class SubClass1 extends AbstractClass {

}
class SubClass2 extends AbstractClass {

}

这样SubClass1和SubClass2将有一个var1。请注意,您可以对getter和setter执行相同的操作,但为了说明这一点,这个更短。