首先,请不要为我的话而开枪。我是法国新手,英语水平稍低。
我正在尝试控制扩展另一个对象的对象的类:
上下文:
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
,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
”更有效的循环输出? 答案 0 :(得分:0)
第一个问题:
for (A item : cbdeList) {
if (item.getClass() == B.class) {
break; // Stop the loop
}
// ...do some stuff...
}
对于第二个问题:break
和continue
的含义完全不同。一个中断了循环,另一个中断了当前步骤。
第三个问题:List
实现表示有序集合,而add
方法将项目添加到列表的末尾。