如何获得在Java中实现特定接口的正确枚举?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何获得在Java中实现特定接口的正确枚举?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1904字,纯文字阅读大概需要3分钟。
内容图文
我有以下界面:
public interface Moon {
// Enums can not extend any class in Java,
// thus I am implementing an interface
double getMass();
double getDiameter();
}
这是由我的枚举实现的(我省略了构造函数和方法实现)
public enum Saturn implements Moon {
ATLAS(30.2, 6.6),
PAN(28.2, 4.95);
private double Diameter;
private double Mass;
// constructor and methods implementation
}
和其他行星类似的枚举:
public enum Mars implements Moon {
PHOBOS(22.2, 1.08),
DEIMOS(12.6, 2);
private double Diameter;
private double Mass;
// constructor and methods implementation
}
题
有两个字符串:
String planetName = "Mars";
String moonName = "PHOBOS";
我怎样才能以聪明的方式获得特定的枚举?
在只有一个枚举类的情况下,它是valueOf方法的简单使用,但是如何检查实现特定接口的所有枚举?
Moon something = <??planetName??>.valueOf(moonName);
解决方法:
您可以使用行星名称到相关枚举类型的映射,并使用它来执行查找.
例如,使用地图(肯定有替代方法):
Map<String, Class<? extends Enum>> planetMoonTypes = new HashMap<>();
planetMoonTypes.put("Saturn", Saturn.class);
planetMoonTypes.put("Mars", Mars.class);
使用这样的映射,您可以使用以下命令查找“PHOBOS”值:
Moon phobos = (Moon) Enum.valueOf(planetMoonTypes.get("Mars"), "PHOBOS");
以上将返回Mars.PHOBOS
编辑:关于添加非月亮枚举的能力.您可以封装地图并强制使用适当的边界.例如,以下使用方法:
class MoonRegistry {
private final Map<String, Class<? extends Enum>>
planetMoonTypes = new HashMap<>();
{
this.registerEnum("Saturn", Saturn.class);
this.registerEnum("Mars", Mars.class);
}
public <T extends Enum<T> & Moon> void registerEnum(
String planetName, Class<T> cls) {
this.planetMoonTypes.put(planetName, cls);
}
public Moon findByPlanetAndName(String planet, String name) {
return (Moon) Enum.valueOf(this.planetMoonTypes.get(planet), name);
}
}
同样,此解决方案不能完全类型安全,因为有多个枚举子类型(如您所见,原始枚举类型是实例字段的类型).但是如果这是正确封装的并且您的代码在此类之外不使用原始类型,则可以确保仅添加实现Moon的枚举类型.
内容总结
以上是互联网集市为您收集整理的如何获得在Java中实现特定接口的正确枚举?全部内容,希望文章能够帮你解决如何获得在Java中实现特定接口的正确枚举?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。