[英]How to use an extended class' name in an if statement
我試圖在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();
}
}
代替
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
都是更好的起點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.