java - Java Enum 将类嵌入到字段中
问题描述
我有一个名为 Country 的 java 枚举类,我有以下代码:
public enum Country {
AFGHANISTAN("Afghanistan","AF","AFG",004, RegionAfghanistan.class),
ALBANIA("Albania","AL","ALB",8, RegionAlbania.class);
.......
Some methods and constructor.
}
所以你可以在最后一个字段中看到我已经将类嵌入到枚举字段中。这些区域中的每一个都是枚举类,如下所示。
public enum RegionAfghanistan {
BADAKHSHAN("Badakhshān", "AF-BDS*", CountryCategory.PROVINCE),
BAGHLAN("Baghlān", "AF-BGL*", CountryCategory.PROVINCE),
BALKH("Balkh", "AF-BAL*", CountryCategory.PROVINCE),
BADGHIS("Bādghīs", "AF-BDG*", CountryCategory.PROVINCE),
BAMYAN("Bāmyān", "AF-BAM*", CountryCategory.PROVINCE),
DAYKUNDI("Dāykundī", "AF-DAY*", CountryCategory.PROVINCE),
......
Some methods and feilds.
现在假设给我区域:Badakhshān 国家:阿富汗作为字符串。首先,我有一种方法,它给了我来自“阿富汗”的 Country.AFGHANISTAN,所以这很好。我还从 Country.AFGHANISTAN 得到一个类,即类 com.****.core.location.RegionAfghanistan 但我想从给定区域“Badakhshān”得到 RegionAfghanistan.BADAKHSHAN。您能否帮助我如何使用 java 枚举来实现这一点。希望你明白我想用这个来实现什么。
我使用了以下代码
Class c = Country.AFGHANISTAN.getRegion();
Method methodname = c.getMethod("getRegionAfghanistanBySubdivisionName", String.class);
System.out.println(methodname.invoke(c, "Badakhshān"));
我从字符串“阿富汗”得到 Country.AFGHANISTAN,然后我得到类,并在类中调用一个方法,传递区域“Badakhshān”,我得到正确的值,但我不确定我是否以正确的方式或在那里是另一种更好的方法。
如果这是正确的方法或者有更好的方法,我真的需要帮助......非常感谢您的帮助。
解决方案
另一种将国家枚举链接到其区域值的方法,您需要改进 getRegions 调用以匹配文本标签而不是我使用的 toUpperCase:
public enum RegionAfghanistan {
BALKH, BAGHLAN;
}
public enum RegionUK {
WALES, ENGLAND;
}
public enum Country {
AFGHANISTAN(RegionAfghanistan.values()),
UK(RegionUK.values());
private Enum<?>[] regions;
<T extends Enum<T>> Country(T[] values) {
this.regions = values;
}
<T extends Enum<T>> T getRegion(String name) {
return Enum.valueOf((Class<T>) regions[0].getClass(), name.toUpperCase());
}
}
public static void main(String[] args) {
System.out.println(Country.AFGHANISTAN.getRegion("Balkh"));
System.out.println(Country.UK.getRegion("Wales"));
}
推荐阅读
- r - 警告:优化器警告未找到解决方案
- javascript - 如何在变异组件的更新函数中访问变量?
- oauth-2.0 - 具有大量范围的“超级”访问令牌的优缺点是什么?
- javascript - FireGestures 脚本调用扩展功能
- java - HttpURLConnection 请求显示在 Android Studio 分析器中但未到达微控制器
- laravel-5.5 - 如果 Laravel 5.5 中存在请求参数,如何添加 where 条件
- mocking - 在测试结束之前验证模拟对象
- java - Android Studio:找不到符号变量错误
- typescript - “非空”类型保护在 else 分支中解析为“从不”
- tfs - 是否有任何选项可以在 TFS Dashboard 中创建 4-D 图表?如果是,那么在 TFS 仪表板中创建这些图表的过程是什么?