Java 8检查扩展了另一个对象的对象的类或实例

时间:2018-08-02 10:40:59

标签: class for-loop java-8

首先,请不要为我的话而开枪。我是法国新手,英语水平稍低。

我正在尝试控制扩展另一个对象的对象的类:

上下文:

class A
class B extends A
class C extends B
class D extends A
class E extends A 

List<A> cbdeList = new ArrayList<A>()
cbdeList .add(new C())
cbdeList .add(new B())
cbdeList .add(new D())
cbdeList .add(new E())

List<T> tList

for (A item : cbdeList ) { /* code that do something with tList */ }

需要:

如果项的类别是B并且只有B,则停止循环。

已完成试用:

item instanceOf B

    即使item.getClass() == C
  • 也返回true。
  • 我认为是因为C类对象继承了B类。

item.getClass()。isInstance(B)

  • B类项目上返回false。
  • 我不明白为什么。

我认为我有一个很好的方法:

  • item.getClass().isAssignableFrom(B.class)

  • item.getClass().equals(B.class)

但是,我在“互联网上”的某个地方(但不记得在哪里)阅读了与item.getClass()B.class一起使用的最佳实践。

现在,我已经修改了循环(forit> fori):

for (i = 0 ; i < list.size() ; i++ )
{ 
    /* code */ 
    if(!(i == 1 && CollectionUtils.isNotEmpty(tList))) 
    { loop output } 
    /* code */
 }

但是这意味着要确保列表项的顺序。

问题:

  • 控制班级的更好方法?
  • 比“ break”或“ continue”更有效的循环输出?
  • 是否总是在循环中遵守ArrayList()中的插入顺序?

1 个答案:

答案 0 :(得分:0)

第一个问题:

for (A item : cbdeList) { 
    if (item.getClass() == B.class) {
        break; // Stop the loop
    }
    // ...do some stuff...
}

对于第二个问题:breakcontinue的含义完全不同。一个中断了循环,另一个中断了当前步骤。

第三个问题:List实现表示有序集合,而add方法将项​​目添加到列表的末尾。