切换SuperClass

时间:2016-11-19 13:43:39

标签: java switch-statement

我有一个名为Class的{​​{1}}和其他扩展此类的类,例如MineralGoldIron

我试图切换一个Coal ,以便了解哪些矿物质已经通过通过以下Mineral方法:

addMineral

但我不知道如何插入扩展Mineral作为案例的类。事实上,上面的例子并没有起作用。

这可以实现吗?这是正确的方法还是有更好的解决方案?

4 个答案:

答案 0 :(得分:2)

正如评论中所述,您需要我们这样的ifinstanceof运算符:

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;
 }