【发布时间】:2017-10-03 11:44:36
【问题描述】:
我有一个实现供应商的枚举,例如:
public enum QUERY_FIELD implements Supplier<String> {
PRODUCT_TYPE("ProductType"),
MIN_NUMBER_OF_PARTS("MinNumberOfParts"),
MAX_NUMBER_OF_PARTS("MaxNumberOfParts");
private final String id;
QUERY_FIELD(final String id) {
this.id = id;
}
@Override
public final String get() {
return id;
}
}
我有不同的实用方法,可以根据查询找到我搜索的枚举
public static <T extends Enum<T> & Supplier<String>> Optional<T> findById(final Class<T> enumClass, final String id) {
return Arrays.stream(enumClass.getEnumConstants()).filter(p -> id.equalsIgnoreCase(p.get())).findFirst();
}
public static <T extends Enum<T> & Supplier<? extends Number>> Optional<T> findById(final Class<T> enumClass, final Number id) {
return Arrays.stream(enumClass.getEnumConstants()).filter(p -> id.equals(p.get())).findFirst();
}
现在我想调整这个想法来创建一个实用方法,该方法只根据供应商类型返回所有值的列表。
我试过了:
public static <T extends Enum<T> & Supplier<? extends String>> List<String> getValueList(final Class<T> enumClass) {
return Arrays.stream(enumClass.getEnumConstants()).map(Supplier::get).collect(Collectors.toList());
}
或
public static <U, T extends Enum<T> & Supplier<? extends U>> List<U> getValueList(final Class<T> enumClass) {
return Arrays.stream(enumClass.getEnumConstants()).map(Supplier::get).collect(Collectors.toList());
}
两者都编译但不起作用, 我应该如何构建这个方法?
【问题讨论】:
-
“不工作”是什么意思?你期望得到什么输出,而你得到了什么?
-
你为什么不把你的枚举实例命名为
ProductType、MinNumberOfParts等,然后你可以使用values()和.name()等 -
刚刚添加并回答我相信可以解决您的问题。为了找到它的原因,我不得不复制你的代码(带有一些模块)并获取运行时堆栈跟踪。然后我只需要谷歌异常类和错误消息来找到解决方案。这么说只是为了指出在您的问题中包含/发布您收到的错误消息有多重要,而不是说它不起作用。