【问题标题】:creating a list of class objects to compare them with another class object创建一个类对象列表以将它们与另一个类对象进行比较
【发布时间】:2016-07-24 12:32:43
【问题描述】:

首先,抱歉,这个问题可能已经回答了,但我的搜索并没有真正告诉我任何事情,而且我也不知道我在搜索什么。

基本上,我需要创建一个 List 的类对象(只存储类/不存储初始化的对象 - 真的不知道如何解释)并将它们与另一个类对象进行比较(ala instanceof )。但我不知道该怎么做。

一个例子是:

我想这样做:

if(something1 instanceof something2)

带有“something1's”的List,以便能够像这样遍历它:

for(int i= 0 ; i <= list.size; i++) 
{
  if (list.get(i) instanceof something2)
    doSomething();
}

所以我基本上需要知道我必须如何/在实际列表中存储什么才能执行类似的操作。

这可能吗?

我希望这有点可以理解。

【问题讨论】:

  • 是的。使用类“Class”的通用列表,例如 List classes = new ArrayList();

标签: java list loops instanceof forge


【解决方案1】:

Class类提供API来做instance of之类的检查:

Class numClass = Number.class;
List<Class> classes = Arrays.asList(Integer.class);
...
if (numClass.isAssignableFrom(classes.get(i))) {
    doSomething();
}

【讨论】:

    【解决方案2】:

    您可以使用equals()方法比较类,该方法将检查类是否完全相同。

    所以你首先将类放在一个列表中(假设你有类FooBar 并且列表是List&lt;Class&gt;):

    list.add(Foo.class);
    

    然后你遍历它并像这样进行比较:

    if (list.get(i).equals(Bar.class))
        doSomething();
    

    【讨论】:

    • 这正是我所需要的!谢谢:)
    【解决方案3】:

    使用通用列表和类 Class:

    List<Class> classes = new ArrayList<Class>();
    classes.add(Integer.class);
    classes.add(String.class);
    classes.add(MyClass.class);
    //...
    
    for (Class myClass : classes) {
        if (myClass.equals(MyOtherClass.class)) {
            doSomething(); 
        }
    }
    

    【讨论】:

      【解决方案4】:

      类列表可以声明为List&lt;Class&gt; list,例如

      List<Class> classes = Arrays.asList(String.class, Number.class);
      Class testedClass = Integer.class;
      

      如果您想测试确切的类相等性,请使用equals

      for (Class clazz : list) {
          if (clazz.equals(testedClass)) {
              doSomething();
          }
      }
      

      甚至更短

      if (list.contains(testedClass)) {
          doSomething();
      }
      

      但如果您需要 instanceof 的类似物,请使用 isAssignableFrom

      for (Class clazz : list) {
          if (clazz.isAssignableFrom(testedClass)) {
              doSomething();
          }
      }
      

      isAssignableFrom 表示clazztestedClass 在同一层次结构中,testedClass 扩展或等于class

      【讨论】:

        猜你喜欢
        • 2023-03-12
        • 2018-08-04
        • 1970-01-01
        • 1970-01-01
        • 2013-11-15
        • 1970-01-01
        • 2018-01-12
        • 1970-01-01
        • 2019-07-19
        相关资源
        最近更新 更多