我正在做一个网络应用程序,我有几个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;
}
我的问题是:
有没有办法实现泛型来访问
getType ()
所有Enums
通用的方法我有吗?这是解决问题的推荐方法吗?因为我在那里看到了接口(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/