2012-08-02 77 views
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中定义var1,var2。

有没有更好的方式来做到这一点?或者我错过了一些非常简单的事情?

回答

1

一个接口中的所有字段都是隐式地 static和final,因此您的警告在上面。有关更多详细信息,请参阅this SO question

在我看来,你想要一个基类与这些变量,但正如你已经注意到,你不能这样做,因为你是从第三方类派生。

我不会从第三方类派生,因为你不控制它的实现。我宁愿创建一个类,包装它,并提供您的附加功能。这给你一定程度的安慰,如果/当第三方课程改变时,你可以限制你随后做出的改变的范围。

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

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 
} 

和访问的interfaceSampleVariables.var1

1

变量,因为接口的成员变量是由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

0

您应该为此使用抽象类。

例如:

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

} 
class SubClass2 extends AbstractClass { 

} 

这样SubClass1和SubClass2将有VAR1。请注意,你可以对getter和setter做同样的事情,但是为了使这一点更短。