Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将方法参数声明为任何枚举_Java_Generics_Enums - Fatal编程技术网

Java 如何将方法参数声明为任何枚举

Java 如何将方法参数声明为任何枚举,java,generics,enums,Java,Generics,Enums,我有一个需要将枚举作为参数传递的方法 public <T> T doSomething(SomeEnum operation, Class<T> something); 你可以做: public void doSomething(final Enum<?> operation); public void doSomething(最终枚举操作); 它说它需要是一个枚举,但不是任何特定的枚举。公共void doSomething(E操作); public &

我有一个需要将枚举作为参数传递的方法

public <T> T doSomething(SomeEnum operation, Class<T> something);
你可以做:

public void doSomething(final Enum<?> operation);
public void doSomething(最终枚举操作);
它说它需要是一个枚举,但不是任何特定的枚举。

公共void doSomething(E操作);
public <E extends Enum<E>> void doSomething(E operation);
编辑:根据您的修改示例:

public class Main {

    public enum Day {
        SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
        THURSDAY, FRIDAY, SATURDAY 
    }

    public <E extends Enum<E>> E doSomething(E operation, Class<E> klazz) {

        return operation;
    }

    public static void main(String[] args) {

        new Main().doSomething(Day.FRIDAY, Day.class);
    }

}
公共类主{
公众普查日{
周日,周一,周二,周三,
星期四、星期五、星期六
}
公共电子剂量仪(电子操作,klazz级){
返回操作;
}
公共静态void main(字符串[]args){
新Main().doSomething(Day.星期五,Day.class);
}
}
编辑2:

如果需要将T和枚举作为单独的类型,则需要:

public <T, E extends Enum<E>> T doSomething(E operation, Class<T> klazz) {
公共剂量仪(E操作,klazz类){

这一项更为明确:

    public class EnumTest {

    protected static <E extends Enum<E>> void enumValues(Class<E> enumData) {
        for (Enum<E> enumVal: enumData.getEnumConstants()) {  
            System.out.println(enumVal.toString());
        }  
    }

    public static enum TestEnum {
        ONE, TWO, THREE;
    }

    public static void main(String param [] ) {
        EnumTest.enumValues(EnumTest.TestEnum.class);
    }
}
公共类枚举测试{
受保护的静态无效枚举值(类enumData){
对于(Enum enumVal:enumData.getEnumConstants()){
System.out.println(enumVal.toString());
}  
}
公共静态枚举TestEnum{
一,二,三,;
}
公共静态void main(字符串参数[]){
EnumTest.enumValues(EnumTest.TestEnum.class);
}
}

这就是方法。另请参见EnumSet以了解此操作中的示例:您好,谢谢您的回复,但我无法添加此部分,因为它再次抱怨签名问题。很抱歉,我应该发布我要查找的确切签名。请参阅我对现有方法签名的编辑,我需要向其添加您所拥有的内容ned.在这种情况下,方法签名会是什么样子???这就是你要找的吗?或者T和枚举应该是不同的类型?这对我来说非常有效,但我不明白为什么函数看起来有两个返回参数,
E
。澄清一下:这基本上就是摆脱了警告(因为
Enum
Enum
是同一件事,但有一件事是明确的)@BrendanLong:
Enum
Enum
不是一回事。例如,您可以向
列表添加内容,但不能向
列表添加任何内容。您的解决方案没有显示如何传递Enum实例,例如,调用一个方法并将其传递给TestEnum.one
    public class EnumTest {

    protected static <E extends Enum<E>> void enumValues(Class<E> enumData) {
        for (Enum<E> enumVal: enumData.getEnumConstants()) {  
            System.out.println(enumVal.toString());
        }  
    }

    public static enum TestEnum {
        ONE, TWO, THREE;
    }

    public static void main(String param [] ) {
        EnumTest.enumValues(EnumTest.TestEnum.class);
    }
}