Java 检查列表中是否存在特定类的实例

Java 检查列表中是否存在特定类的实例,java,class,linked-list,variable-assignment,instanceof,Java,Class,Linked List,Variable Assignment,Instanceof,好吧,如果已经回答了,我道歉。我试着寻找,但没有找到答案 现在,我有了一个链表实用程序类(在一个方向上链接),它包含用于不同事物的各种通用实用程序方法。我要做的是创建一个能够将任何给定类的实例作为参数的方法,然后继续检查列表中是否存在此类实例,如果存在,则返回true,如果不存在,则返回false。列表本身包含几个不同类的实例 该方法将与游戏板上详细说明空间内容的列表结合使用:如果空间包含敌人,则显示敌人的图标并使空间无法通行;如果空间包含物品,则显示物品的图标,依此类推。这里真正重要的是,该方

好吧,如果已经回答了,我道歉。我试着寻找,但没有找到答案

现在,我有了一个链表实用程序类(在一个方向上链接),它包含用于不同事物的各种通用实用程序方法。我要做的是创建一个能够将任何给定类的实例作为参数的方法,然后继续检查列表中是否存在此类实例,如果存在,则返回true,如果不存在,则返回false。列表本身包含几个不同类的实例

该方法将与游戏板上详细说明空间内容的列表结合使用:如果空间包含敌人,则显示敌人的图标并使空间无法通行;如果空间包含物品,则显示物品的图标,依此类推。这里真正重要的是,该方法应该能够处理任何类和所有类,因此我不能使用以下内容:

public enum MapObjectType {
    ENEMY, ALLY, WALL;
}

public interface MapObject {
    MapObjectType getType();
}
如果(敌人的foo实例) { . . . }

以下是我最初尝试做的: //此方法位于LinkedList类中

public boolean exists(Object o)
{
    int i = 0;
    boolean output = false;
    //koko() returns the size of the linked list
    while(i < koko() && !output)
    {
        //alkio(i) returns an Object type reference to the entity in index i
        if(alkio(i) instanceof o.getClass())
        {
            output = true;
        }
    }
    return output;
}
存在公共布尔值(对象o)
{
int i=0;
布尔输出=假;
//koko()返回链接列表的大小
而(i
但结果是:

是的,这是一个家庭作业(或者更确切地说,是一个大家庭作业的一部分),但是老师不会在凌晨两点回答,而且我的google fu太弱了

halp plz

  • 纳尔
    • 这个怎么样

      public static void main(String[] args)
      {
          Integer myInt = 1;
          System.out.println(exists(Arrays.asList(1, 2, 3), myInt)); //true
          System.out.println(exists(Arrays.asList("1", "2", "3"), myInt)); //false
      
      }
      
      /**
       * Returns whether an object exists in @list that is an instance of the class of object @o.
       */
      public static boolean exists(List<?> list, Object o)
      {
          return list == null || o == null ? false : list.stream().filter(o.getClass()::isInstance).findAny().isPresent();
      }
      
      publicstaticvoidmain(字符串[]args)
      {
      整数myInt=1;
      System.out.println(存在(Arrays.asList(1,2,3),myInt));//true
      System.out.println(存在(Arrays.asList(“1”、“2”、“3”),myInt));//false
      }
      /**
      *返回对象@o类的实例@list中是否存在对象。
      */
      存在公共静态布尔值(列表,对象o)
      {
      return list==null | | o==null?false:list.stream().filter(o.getClass()::isInstance).findAny().isPresent();
      }
      
      如果我正确理解了您的问题,那么您需要将类传递给您的方法,而不是类的实例:

      public boolean exists (Class checkClass) {
          ...
          if (item.getClass().equals(checkClass)) {
              return true;
          }
          ...
      }
      
      然后将其称为:

      if (myList.exists(Enemy.class)) {
          ...
      }
      
      但是,你应该考虑一个不同的模型,因为这显示了一些相当差的面向对象设计。更好的方法是使用一个
      界面
      来表示地图上可以显示的所有内容。比如:

      public enum MapObjectType {
          ENEMY, ALLY, WALL;
      }
      
      public interface MapObject {
          MapObjectType getType();
      }
      
      然后,可以放入表示地图的列表中的每个类都应该实现这个接口。例如:

      public class Enemy implements MapObject {
      
          @Override
          public MapObjectType getType() {
              return MapObjectType.ENEMY;
          }
      }
      
      那么你的方法可能更明智:

      public boolean hasObjectOfType(MapObjectType type) {
          ...
          if (item.getType().equals(type)) {
              return true;
          }
          ...
      } 
      

      执行
      instanceof
      的动态方法是使用以下方法:

      确定指定的
      对象
      是否与该
      表示的对象兼容。此方法是Java语言
      instanceof
      运算符的动态等价物


      因此,
      o.getClass()的alkio(i)instanceof应该写入
      o.getClass().isInstance(alkio(i))

      为什么要将对象而不是类作为输入?我如何将类作为参数?这将是最简单的,但我不完全意识到这是可能的。。。语法是什么?你认为o.getClass返回什么?它返回一个
      。或者您可以编写literal
      MyClass.class
      。那么您实际上如何将其放入方法头。。。?公共布尔存在(//这里是什么?)很抱歉,我无法理解。。。你来这里干什么?听起来很不错。。。因此,如果我理解正确,枚举包含映射中的所有内容,并且接口。。。界面怎么样?链表是否实现了该接口?接口MapObject是否仅包含上述方法?@Narmondur枚举表示进入映射的对象类型。然后,每个对象类都应该实现接口。我将在答案中添加一个例子。我用Class.isInstance()方法解决了这个问题,主要是因为我怀疑老师会对枚举的使用略微皱眉,因为我们还没有经历过这些(我知道它们的唯一原因是我碰巧偶然发现了一门远高于我技能水平的课程,他们也提到过)。最重要的是,使用我专门为不同类创建的方法将破坏链表的这种特殊实现应该具有的通用性。不管怎样,我将把这个页面保存在某个地方,因为您的回复给了我一些有价值的信息,我将在将来使用。谢谢:)并且只是为了确保:如果提供给该方法的参数是Foo类型,并且alkio(I)返回的引用指向的实例,比如。。。对象类,您告诉我的方法将返回false?相反,如果索引i处的实体是Foo类型,它将返回true?