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);
}
}