java - 使用泛型作为参数并访问特定枚举的方法

标签 java generics web-applications enums

我正在做一个网络应用程序,我有几个Enum设置 View 下拉列表的值(5 以及计数...)

枚举的格式是相同的:

public enum PetType {
    CAT ("Cat"),
    DOG ("Dog");

    private String type;

    PetType(String type) { this.type = type; }

    public void   setType(String type) { this.type = type; }
    public String getType()            { return this.type; }

}

我还使用名为 OptionDTO 的 DTO获取这些值并将它们带入 View :

public class OptionDTO {
    private Integer value;
    private String option;

    / * Constructors, getters and setters * /

}

在服务中我正在创建一个 OptionDTO列表来自Enum s:

        

public List<OptionDTO> getPetTypes() {

    List<OptionDTO> l = new ArrayList<>();

   for (PetType p: PetType.values​​())
       l.add (new OptionDTO(p.ordinal(), p.getType()));

   return l;
}

我想实现的是一个返回 List <OptionDTO> 的私有(private)方法。 。例如

public List<OptionDTO> getPetTypes() {
    return getList(PetType.values​​());
}

我正在尝试使用泛型,但当我想使用 getType() 时遇到问题方法。

private<T extends Enum<T>> List<OptionDTO> getList(T[] list) {
    List<OptionDTO> l = new ArrayList<>();

    for(T t : list)
        l.add(new OptionDTO(t.ordinal(), t.getType()));

    return l;
}

我的问题是:

  1. 有没有办法实现泛型来访问 getType ()所有 Enums 通用的方法我有吗?

  2. 这是解决问题的推荐方法吗?因为我在那里看到了接口(interface)的使用。

最佳答案

你会这样做:

interface HasType {
    String getType();
}
enum PetType implements HasType {
    ...
}
private <E extends Enum<E> & HasType> List<OptionDTO>(E[] values) {
    ...
}

交集类型Enum<E> & HasType意味着E必须是 Enum<E> 的子类型和HasType .

在这种情况下,您也可以传递 Class<E>并使用 type.getEnumConstants() 而不是传递 values()直接,如果您需要这样做的话。

顺便说一句,给你的 enum 并没有什么意义。 setter 。枚举应该是不可变的常量。

关于java - 使用泛型作为参数并访问特定枚举的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44222334/

相关文章:

Java - 如何结合 mp3 与 jpg/png/

java - Eclipse/PyCharm 中的 jython 设置

delphi - 将泛型与不同的约束相结合

c# - 使用泛型方法将继承的泛型类添加到字典

java - 方法参数必须是实现某个接口(interface)的某个类的obj

java - 什么触发了 Java 中的完整垃圾回收?

java - 多次点击在 Android 中不起作用

javascript - Windows Phone 7 Web App 中的页面导航

javascript - 使用 sw-toolbox.js 时获取 "Uncaught ReferenceError: require is not defined"

python - 如何在 python 中查看 Heroku 日志记录和运行时错误输出