我想定义一个接口,以便实现它的所有类都将定义一个名为Fields
的内部枚举。这可能在Java中吗?
编辑:我正在使用Java(Servlets / JSP)创建动态Web应用程序。我试图让我的模型都有save()
方法,以便它们存储在数据库中。为了表示系统中用户的数据和字段,我想使用Map<User.Fields, Object>
。但是我想将save()
方法放在接口中,所以我想确保所有可保存对象都有Fields
枚举。例如,User
类可以定义类似:
public class User {
enum Fields { USERNAME, PASSWORD }
}
答案 0 :(得分:2)
不,你不能。
为什么不在父界面中使用枚举。
编辑回答问题的编辑: 你不应该这样做。而是有这样的界面:
interface Saveable
{
Object[] getSaveFields();
}
只需寻找纪念品模式,它可能对你有帮助。
答案 1 :(得分:0)
正如Suraj所说,不,不可能。你的意图是什么呢?如果每个子类定义了自己的字段集,则可以强制使用getFields方法,返回实现另一个接口(和/或枚举)的一组对象。或者只是按名称,你需要reflexions API(即getClass()。getDeclaredFields())?
答案 2 :(得分:0)
我用来解决这个问题的一种技术是定义一个枚举类型的接口,这样你就可以用一个类“连接”一个特定的枚举,然后用子类定义那个枚举,如下所示:
public interface MySuper<T extends Enum<T>> {
void someMethod(T someEnum);
}
public class MySubClass implements MySuper<MyEnum> {
public static enum MyEnum {
ONE, TWO, THREE
}
void someMethod(MyEnum myEnum) {
// do something
}
}
奇怪的是,你必须import static mypackage.MySubClass.MyEnum;
答案 3 :(得分:0)
enum E {
e1,e2
}
interface I{
Enum getEnum();
}
interface I2 {
EnumSet getEnums();
}
class I2Impl implements I2 {
@Override public EnumSet getEnums() {
return EnumSet.allOf(E.class);
}
}
public class Main {
public static void main(String[] args) {
System.out.println(new IImpl().getEnum());
System.out.println(new I2Impl().getEnums());
}
}