计算每个类型的对象数 - Instanceof或getClassName

时间:2018-04-06 15:40:12

标签: java instanceof

我有三个课程 - OneTwo extends OneThree 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;对象的类型?

感谢。

1 个答案:

答案 0 :(得分:8)

因为TwoThree的任何内容也是One,所以一切都符合第一个条件。

首先检查Three;然后检查Two;然后One持续。