繁体   English   中英

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

[英]Use generics as an argument and access methods of particular enums

我正在做一个Web应用程序,我有几个Enum来设置视图下拉列表的值(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来获取这些值并将其带到视图中:

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

    / * Constructors, getters and setters * /

}

在服务中,我从Enum创建一个OptionDTO列表:

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>的私有方法。 例如

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. 有没有一种方法可以实现泛型来访问我拥有的所有Enums共有的getType ()方法?

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

您可以这样做:

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设置者没有任何意义。 枚举应该是不可变的常量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM