我试图在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();
}
}
答案 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)
instanceof
或isAssignableFrom
比分析字符串的名称要好得多。