【发布时间】:2014-01-15 22:08:16
【问题描述】:
在下面的代码中,我返回一个类,该类扩展了给定类名称的实体类型(然后它会更正它,以便Class.forName 可以正确找到它)。
如何修改它,以便我仍然可以返回扩展实体的类不使用 @SuppressWarnings("unchecked")?
我厌倦了使用T 和? 的一些变化,但无法找到答案。
@SuppressWarnings("unchecked")
public static Class<? extends Entity> getProjectile(String name) {
if (name.equalsIgnoreCase("ARROW"))
name = "Arrow";
else if (name.equalsIgnoreCase("ENDERPEARL"))
name = "EnderPearl";
else if (name.equalsIgnoreCase("EXPERIENCEORB"))
name = "ExperienceOrb";
else if (name.equalsIgnoreCase("FIREBALL"))
name = "Fireball";
else if (name.equalsIgnoreCase("FIREWORK"))
name = "Firework";
else if (name.equalsIgnoreCase("SMALLFIREBALL"))
name = "SmallFireball";
else if (name.equalsIgnoreCase("SNOWBALL"))
name = "Snowball";
else
name = "Egg";
try {
return (Class<? extends Entity>) Class.forName("org.bukkit.entity." + name);
} catch (ClassNotFoundException e) {
return Egg.class;
}
}
【问题讨论】:
-
与您的问题无关,但要清理该代码,将大写字符串变成一个枚举并摆脱 if - 在开头放置一个静态块并启动一个静态 Map
检查 enum 的 equals 方法中的相等性并实现 hashcode
标签: java generics casting extends unchecked-cast