如何在if语句中使用扩展类的名称

时间:2014-02-23 23:42:13

标签: java arrays class methods arraylist

我试图在if语句中使用扩展类的名称。对于这个类(giveAwayFish类),它代表一个人退出和 将所有物品归还湖中和/或将它们送到另一个渔民(只有当渔民需要这个物品时,否则它会被扔回湖中)。但是,如果退出的人抓住了Treasure(这是一个已被延长的阶级),他们会保留它并且不会将其返回湖中或将其交给另一个渔民。我尝试编写方法,但由于某些原因它不起作用,如果有人可以帮助我,这将是伟大的。如果有人想知道这是在Fisher class

public void giveAwayFish(Fisher fisher, Lake lake)
      {
        for(Catchable item : thingsCaught)
        {
          if(item.isDesirableTo(this) && !getClass().getSimpleName().equals("Treasure"))
          {
            fisher.keep(item);      
            this.numThingsCaught = 0;
             thingsCaught.clear(); //here thingsCaught represents an arraylist of items
                                   //of the person who is quitting
          }
          else if(getClass().getSimpleName().equals("Treasure"))
          {
             this.numThingsCaught = 1;
          }
          else
          {
             lake.add(item);
             this.numThingsCaught = 0;
              thingsCaught.clear();
          }
          sumOfWeight -= item.getWeight();
        }

      }

1 个答案:

答案 0 :(得分:0)

而不是

else if(getClass().getSimpleName().equals("Treasure"))

为什么不只是

else if(this instanceof Treasure)

else if(this.getClass().isAssignableFrom(Treasure.class));  //maybe the other way around?

Class.isAssignableFrom(cls)的API:

http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#isAssignableFrom(java.lang.Class)

instanceofisAssignableFrom比分析字符串的名称要好得多。