我有一个名为Class
的{{1}}和其他扩展此类的类,例如Mineral
,Gold
和Iron
。
我试图切换一个Coal
类,以便了解哪些矿物质已经通过通过以下Mineral
方法:
addMineral
但我不知道如何插入扩展Mineral作为案例的类。事实上,上面的例子并没有起作用。
这可以实现吗?这是正确的方法还是有更好的解决方案?
答案 0 :(得分:2)
正如评论中所述,您需要我们这样的if
和instanceof
运算符:
if(mineral instanceof Gold) {
...
}
else if(...) {
...
}
答案 1 :(得分:1)
您必须使用instaceof检查对象类型。
例如:
if(mineral instanceof Gold)
System.out.println("mineral is instance of Gold");
else if(mineral instanceof Iron)
System.out.println("mineral is instance of Iron");
else if(mineral instanceof Coal)
System.out.println("mineral is instance of Coal");
Here you can find clear picture of this instanceof scenario.
答案 2 :(得分:1)
您无法打开任意对象。
您无法打开对象的类。
但是你可以打开一个对象类的名称:
switch (mineral.getClass().getName()) {
case "some.pkg.Gold":
// some stuff
}
或者您可以使用mineral.getClass().getSimpleName()
并在没有包名称等的情况下打开类名。
然而,使用instanceof
打开班级名称和测试通常都是#34;代码味道"。如果可能的话,最好使用多态而不是硬连接其他代码中不同子类的特殊情况处理; e.g。
if (mineral.hasSomeProperty()) {
// do stuff
}
答案 3 :(得分:1)
如果您仍想使用开关,请尝试以下操作:
switch (object.getClass().getSimpleName()){
case : "Gold"
//something
break;
case : "Iron"
//something
break;
}