我有三个课程 - One
,Two extends One
,Three extends Two
我必须编写一个方法来计算ArrayList<One>
中每个类的实例数。
ArrayList<One> v = new ArrayList<>(3);
v.add(new One();
v.add(new Two();
v.add(new Three();
工作代码:
public static void test2(ArrayList<One> v){
String className = "";
int countOne = 0, countTwo = 0, countThree = 0;
for (int i = 0; i <v.size() ; i++) {
className = v.get(i).getClass().getSimpleName();
if (className.equals("One")){
countOne++;
}
else if (className.equals("Two")){
countTwo++;
}
else{
countThree++;
}
}
System.out.println("One = "+countOne + "Two = " + countTwo + "Three = " +countThree);
}
无效代码 - 使用Instanceof
public static void test2(ArrayList<One> v){
String className = "";
int countOne = 0, countTwo = 0, countThree = 0;
for (int i = 0; i <v.size() ; i++) {
if (v.get(i) instanceof One){
countOne++;
}
else if (v.get(i) instanceof Two){
countTwo++;
}
else{
countThree++;
}
}
System.out.println("One = "+countOne + "Two = " + countTwo + "Three = " +countThree);
}
为什么我的代码不能与instanceof
一起使用?它不应该取得&#34;权利&#34;对象的类型?
感谢。
答案 0 :(得分:8)
因为Two
或Three
的任何内容也是One
,所以一切都符合第一个条件。
首先检查Three
;然后检查Two
;然后One
持续。