Java:方法参数中的通用枚举

标签 java generics parameters enums

对应以下问题:

Java: Enum parameter in method

我想知道,如何将代码格式化为一般需要枚举。

Foo.java

public enum Foo { 
    a(1), b(2);
}

Bar.java

public class Bar {
    public Bar(generic enum);
}

稍后我会有更多的枚举类,比如“foo”,但是你仍然可以创建包含任何类型的枚举类的 bar。顺便说一句,我有“jdk1.6.0_20”...

最佳答案

EnumSet中的方法供引用,例如

public static <E extends Enum<E>> EnumSet<E> of(E e)

(此方法返回一个 EnumSet,其中包含给定 Enum 元素 e 中的一个元素)

所以你需要的通用范围是:<E extends Enum<E>>


实际上,您可能会制作Bar本身是通用的:

public class Bar<E extends Enum<E>> {

    private final E item;

    public E getItem(){
        return item;
    }

    public Bar(final E item){
        this.item = item;
    }
}

您还可以添加工厂方法,例如 from , with等等

public static <E2 extends Enum<E2>> Bar<E2> with(E2 item){
    return new Bar<E2>(item);
}

这样,在客户端代码中您只需编写一次通用签名:

// e.g. this simple version
Bar<MyEnum> bar = Bar.with(MyEnum.SOME_INSTANCE);
// instead of the more verbose version:
Bar<MyEnum> bar = new Bar<MyEnum>(MyEnum.SOME_INSTANCE);

引用:

关于Java:方法参数中的通用枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4325319/

相关文章:

java - 如何避免 java7 if 语句或使代码更具可读性

java - 将日历转换为字符串

c# - 动态创建结构的List<>

asp.net-mvc - 这是 ASP.NET MVC 2 Preview 1 的错误吗?解决方法是什么?

c++模板化 map ,不同类型参数的通用接口(interface)

url - 你如何处理排序、分页和过滤的参数?

java - 在 build.properties 中找不到 key.store 和 key.alias 属性

java - JBAS011006 由于异常 DeploymentUnitProcessingException 而未安装可选组件 StandardServletAsyncWebRequest

java - 使用 hibernate 保存/更新对象

C#:ObservableCollection - 为什么没有通用 "CollectionChanged"事件?