[英]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;
}
我的问题是:
有没有一种方法可以实现泛型来访问我拥有的所有Enums
共有的getType ()
方法?
这是解决问题的推荐方法吗? 因为我在那里看到了接口的使用。
您可以这样做:
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.