簡體   English   中英

如何在if語句中使用擴展類的名稱

[英]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)

與分析字符串名稱相比, instanceofisAssignableFrom都是更好的起點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM