首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将方法参数声明为任何枚举

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

Stack Overflow用户
提问于 2012-07-11 22:36:53
回答 3查看 18.1K关注 0票数 30

我有一个方法,需要将枚举作为参数传递给它。

代码语言:javascript
复制
public <T> T doSomething(SomeEnum operation, Class<T> something);

我有几个枚举和方法是一个通用的方法,应该适用于任何枚举。编写此方法签名以接受任何泛型枚举类型的正确方法是什么?我知道我可以使用一个标记接口来实现这一目的,但我想用通用的枚举签名来编写它。关于这一点,请给我一些建议。

下面这个错误的想法是什么:(它可以工作,但我从IDE得到警告,说它是一个原始类型。我不清楚原因)。

代码语言:javascript
复制
 public void doSomething(Enum operation);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-11 22:38:57

代码语言:javascript
复制
public <E extends Enum<E>> void doSomething(E operation);

EDIT:根据您的修改提供的示例:

代码语言:javascript
复制
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);
    }

}

EDIT2:

如果您需要T和Enum作为单独的类型,那么您将需要:

代码语言:javascript
复制
public <T, E extends Enum<E>> T doSomething(E operation, Class<T> klazz) {
票数 39
EN

Stack Overflow用户

发布于 2012-07-11 22:38:27

你可以这样做:

代码语言:javascript
复制
public void doSomething(final Enum<?> operation);

这说明它需要是一个枚举,但不是任何特定的枚举。

票数 13
EN

Stack Overflow用户

发布于 2017-05-22 22:55:28

这一条更清晰:

代码语言:javascript
复制
    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);
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11435067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档