java - 获取实现接口的通用枚举的值
问题描述
我有以下界面:
public interface GenericMethods {
public String getString();
}
使用这个接口,我实现了这个枚举:
public enum SpecificEnum implements GenericMethods {
A("NOT"), B("RELATED"), C("TEXT");
SpecificEnum(String string) {
this.string = string;
}
private String string;
@Override
public String getString() {
return this.string;
}
}
现在,我希望能够使用参数调用函数,SpecificEnum.class
并能够values()
在该参数上调用函数,以及返回数组元素的接口方法。像这样的东西:
class Main {
public static void main(String[] args) {
for (GenericMethods gm : getEnums(SpecificEnum.class)) {
System.out.printf(gm.getString());
}
}
public static T[]<T extends GenericMethods> getEnums(Class<T> enum1) {
enum1.values();
}
}
但是,经过大量搜索,我还没有遇到过使用泛型和枚举同时实现接口的案例。我也对泛型类型进行了很多思考,但我找不到能够调用values()
泛型枚举类的正确语法。主要目标是以相同的方式管理多个相关的枚举。
解决方案
我怀疑您可能正在寻找类似的东西:
public static <T extends Enum<T> & GenericMethods> T[] getEnums(Class<T> enum1) {
return enum1.getEnumConstants();
}
public static void main(String[] args) {
for (GenericMethods gm : getEnums(SpecificEnum.class)) {
System.out.println(gm.getString());
}
}
结果:(
演示:https ://ideone.com/v6on2p )
NOT
RELATED
TEXT
变化:
- 在返回类型之前移动
<T extends GenericMethods>
,因为只有泛型方法可以声明其泛型类型。 - 修改泛型类型以
<T extends Enum<T> & GenericMethods>
强制 T 也是某些 Enum 的子类型,除了实现 GenericMethods - 使用
getEnumConstants()
而不是values()
我们使用的Class
,而不是enum
类型。
推荐阅读
- python - 在Django的post请求中从url捕获值
- c# - 为什么 EF Core 2.2 将默认主键设置为 nvarchar(450)
- mysql - 使用 MySQL 查询获取特定行的位置排名
- vba - 每个循环都有问题
- php - Laravel Find 和 first 不能正常协同工作
- .net - WPF 模板不适用于 .NET Core 3 Preview 8 3.0.100.13656 和 VS 2019 16.2.3
- amazon-web-services - 我想知道如何在 aws 上定期安排我的 shell
- apache-spark - 与 deviceid 对应的 Spark 结构化流式水印
- crashlytics - 如何一次记录两个 Crashlytics 异常
- java - 如何将 quickbooks 的 java sdk 集成到 android 应用程序中?