Java 一个使用公共接口实例化枚举集合的线性程序

Java 一个使用公共接口实例化枚举集合的线性程序,java,generics,collections,enums,Java,Generics,Collections,Enums,我有两个实现公共接口的枚举。我试图声明接口,以便只有枚举才能实现它 interface CommonEnumInterface<E extends Enum<?>> { /** It doesn't matter what this does. */ E commonInterfaceMethod(); } enum Enum1 implements CommonEnumInterface<Enum1> { FOO, BA

我有两个实现公共接口的枚举。我试图声明接口,以便只有枚举才能实现它

interface CommonEnumInterface<E extends Enum<?>> {

    /** It doesn't matter what this does. */
    E commonInterfaceMethod();

}

enum Enum1 implements CommonEnumInterface<Enum1> {
    FOO,
    BAR,
    BAZ;

    @Override
    public Enum1 commonInterfaceMethod() {
        return null;
    }
}

enum Enum2 implements CommonEnumInterface<Enum2> {
    BLAH,
    YADDA,
    RHUBARB;

    @Override
    public Enum2 commonInterfaceMethod() {
        return Enum2.BLAH;
    }
}

我的问题在上面,在代码注释中。一般来说,这是声明我的接口的正确方法吗?

我会尝试一下。您可以尝试使用动态类型

List<CommonEnumInterface<dynamic>>
or
List<dynamic>

涉及枚举的事实实际上是一种转移,因为只需为
T
传递
List&CommonEnumInterface
,就返回了
List>
。因为,这不能分配给
list,所以要求它是enum有什么原因吗?你不能只使用带有公共静态最终成员的类吗?@Jason:谢谢你鼓励我退后一步,但实际上,是的,我使用enum有很多原因。这里提到了其中的一些问题:顺便提一下,这个问题写得很好+1@Paul:干杯。我希望我至少能因此获得一些荣誉,但你的答案是真正的胜利。:-)这是Java,不是C。没有“动态”关键字。哈希表有什么帮助<代码>哈希表。。。??或者这是对C#?;-)的双关语@皮埃尔:谢谢你的详细说明。这是一个很好的技巧,但对于最初的问题来说,这是一个更干净的解决方案:@MichaelScheper Sweet:)会记得我在你的情况下。当然是Java:D
List<CommonEnumInterface<dynamic>>
or
List<dynamic>
public class MyEnums
{
    List<Tuple<Enum, string>> myEnums;
    public void addEnum(Enum Enum, string EnumName)
    {
        myEnums.Add(new Tuple<Enum, string>(Enum, EnumName));
    }

    public List<Tuple<Enum, string>> getEnums()
    {
        return myEnums;
    }

    public Enum getEnumByName(string EnumName)
    {
        return myEnums.Where(n => n.Item2 == EnumName).Select(n => n.Item1).FirstOrDefault();
    }
}
public class myEnums
{
    public dynamic s { get; set; }
}
A(Arrays.<CommonEnumInterface<?>>asList(Enum1.FOO, Enum2.BLAH)),

//etc.