Java 如何使用扩展类';if语句中的名称

Java 如何使用扩展类';if语句中的名称,java,arrays,class,methods,arraylist,Java,Arrays,Class,Methods,Arraylist,我试图在if语句中使用扩展类的名称。对于这个类(“代码>赠品鱼”类),它代表一个人退出并 将其所有物品退回湖中和/或将其交给另一名渔民(仅当渔民需要该物品时,才可以这样做,否则会将其扔回湖中)。但是,如果退出的人捕获了宝藏(这是一个已扩展的类),他们会保留宝藏,不会将其返回湖中或交给其他渔民。我试图写的方法,但它不工作的原因,如果有人可以帮助我在这方面,这将是伟大的。如果有人想知道这在我的Fisher类中 public void giveAwayFish(Fisher fisher, Lake

我试图在if语句中使用扩展类的名称。对于这个类(“代码>赠品鱼”类),它代表一个人退出并 将其所有物品退回湖中和/或将其交给另一名渔民(仅当渔民需要该物品时,才可以这样做,否则会将其扔回湖中)。但是,如果退出的人捕获了
宝藏
(这是一个已扩展的类),他们会保留宝藏,不会将其返回湖中或交给其他渔民。我试图写的方法,但它不工作的原因,如果有人可以帮助我在这方面,这将是伟大的。如果有人想知道这在我的
Fisher类中

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)

?

类的API.isAssignableFrom(cls)


无论是
instanceof
还是
isAssignableFrom
都是比分析字符串名称更好的起点。

也许你可以使用
getClass()==Treasure.class
或者
这个instanceof Treasure
“它不工作”。。。我们不是读心术的人,你能分享更多细节吗?就像编译器显示的错误消息一样,如果抛出异常,堆栈回溯,或者错误行为是什么,以及您认为应该是什么。错误基本上是在我运行此程序时发生的,比如说“Suzy”将所有的鱼都给了“fred”,Suzy在开始时捕获了宝藏,尽管主程序中使用了这种方法,但当使用giveway()方法@ajbUnrelated时,她还是给了弗雷德一条鱼,但我对设计提出了质疑。您需要手动查询类型的情况应该相对较少。@user3330114抱歉,但您仍然假设我们知道此描述与代码的关系,而我们不知道。至少我说不出来。我的建议是:在
if
之前添加
System.out.println(getClass().getSimpleName())
。也许你会发现问题所在。请注意,这两种情况并不相同<如果类是
珍宝
或珍宝的任何子类,则代码>实例为
;对子类使用相等不会返回
true
。但是,我不知道哪一个是正确的,因为OP没有提供关于确切问题的信息。对。它们不是等价物<但是,与分析类字符串名称相比,code>instanceof或
isAssignableFrom(cls)
是一个更好的起点。我想你是在我添加
isAssignableFrom
部分之前发表评论的。我澄清了我的答案。
else if(this.getClass().isAssignableFrom(Treasure.class));  //maybe the other way around?