0

我有一个示例界面

 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;
}

}

其中 Message 类是我尝试使用的预定义类,我无法在 Message 类中定义 var1、var2。

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

4

4 回答 4

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

于 2012-08-02T09:08:36.297 回答
1

由于 Interface 的成员变量是 by,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 语言规范

于 2012-08-02T09:10:34.710 回答
1

接口中的所有字段都是隐式静态和最终的,因此您在上面发出警告。有关更多详细信息,请参阅此 SO 问题

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

我不会从那个 3rd-party 类派生,因为你不控制它的实现。我宁愿创建一个包装它并提供附加功能的类。如果/当该第 3 方类发生更改,您可以限制随后必须进行的更改的范围,这让您感到一定程度的舒适。

不幸的是,Java 不支持mixins,这是您在这里想要实现的。

于 2012-08-02T09:07:58.940 回答
0

您应该为此使用抽象类。

例子:

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

}
class SubClass2 extends AbstractClass {

}

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

于 2012-08-02T09:15:11.057 回答