我在课堂上使用“Flags”的界面。让我们称之为
public interface Flags
我希望能够使用对象实现Flags接口,并让它继承我放入其中的所有子标志。实施例
public interface Flags{
static int flag1 = 0;
public interface Size{
public static int big = 1;
public static int small = 2;
public interface Direction{
public static int left = 3;
public static int right = 4;
所以我想要的是让对象Foo实现Flags类
public class Foo implements Flags{}
并且可以访问所有子标志(即left,right,big,small,flag1)。
但我也想要它,以便我可以让Foo1实现Size并且只能访问Size标志
public class Foo1 implements Flags.Size{}
我发现这个Can we define an interface within an interface?表明嵌套接口是可能的,但我不知道如何以我正在寻找的方式做到这一点。
我已经尝试过简单地做我正在寻找的东西,它变成了巨大的痛苦。 我的意思是,如果我想让Foo访问大旗,我将不得不做以下
public class Foo implements Flags{
final int size = Size.big;
}
这远非理想。我更愿意做以下
public class Foo implements Flags{
final int size = big;
}
答案 0 :(得分:4)
为什么不使用Enums进行此行为?您应该为此使用枚举,因为它们是静态值enum tutorial。
答案 1 :(得分:0)
使用接口来存储常量被认为是一种不好的做法(正如Joshua Bloch在Effective Java中指出的那样),它们并不是为了达到这个目的而发明的。您应该考虑为此目的使用静态类成员或枚举。
然而,即使这不是一个不好的做法,这样的事情也没有任何意义。如果您的类可以访问该接口,则它还可以访问其所有成员。
答案 2 :(得分:0)
为什么要嵌套接口?只需在每个源文件中单独声明子接口,然后使Flags
接口继承所有子接口:
public interface Flags extends Size, Direction {
int flag1 = 0;
}
这将允许您使Foo
类实现您的Flags
接口,从而继承所有字段,并且还允许您使Foo1
类仅实现Size
类1}} interface。
注1:将接口成员声明为public
没有任何意义,因为默认情况下它们都是公共的。对于static
成员也是如此:如果成员不是方法,那么它将自动static
。
注2:正如其他人所指出的,使用接口存储常量被认为是不好的做法。你应该使用枚举。但是,我今天感觉不像是纯粹主义者,使用枚举不会允许你所遵循的行为,因为枚举不能被继承。