接口是否可以要求类定义内部枚举?

时间:2011-06-23 10:03:44

标签: java interface enums

我想定义一个接口,以便实现它的所有类都将定义一个名为Fields的内部枚举。这可能在Java中吗?

编辑:我正在使用Java(Servlets / JSP)创建动态Web应用程序。我试图让我的模型都有save()方法,以便它们存储在数据库中。为了表示系统中用户的数据和字段,我想使用Map<User.Fields, Object>。但是我想将save()方法放在接口中,所以我想确保所有可保存对象都有Fields枚举。例如,User类可以定义类似:

public class User {
    enum Fields { USERNAME, PASSWORD }
}

4 个答案:

答案 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());
    }
}