【问题标题】:How to make instanceof differentiate between sub-class and parent-class?如何使 instanceof 区分子类和父类?
【发布时间】:2015-03-26 15:53:32
【问题描述】:

在 java 中 LinkedHashSet 扩展 HashSet 我有一个代码写成:

import java.util.*;
class SetInterfaceUsage
{
    static <Obj> void display(Obj myList)
    {
        if(myList instanceof HashSet)
            System.out.println("Hash Set contains : " + myList + " ......order based on Hashing");
        else if(myList instanceof LinkedHashSet)
            System.out.println("Linked List contains : " + myList + " ......In inserted order.");
        else if(myList instanceof TreeSet)
            System.out.println("Tree Set contains : " + myList + " ......Ascending order.");
    }
    public static void main(String X[])
    {
        /*  HashSet */
        Set hs = new HashSet();
        hs.add(2001);
        hs.add(':');
        hs.add('A');
        hs.add("Space Odyssey");
        hs.add(2002);
        hs.add("0");
        display(hs);

        /*  Linked Hash Set */
        Set lhs = new LinkedHashSet();
        lhs.add(2001);
        lhs.add(':');
        lhs.add('A');
        lhs.add("Space Odyssey");
        lhs.add(2002);
        lhs.add("0");
        display(lhs);

        /* Tree Set */  /*  All Strings */
        Set ts = new TreeSet();
        ts.add("2001");
        ts.add(":");
        ts.add("A");
        ts.add("Space Odyssey");
        ts.add("2002");
        ts.add("0");
        display(ts);
    }
}

输出如下:

Hash Set contains : [2002, 0, 2001, A, :, Space Odyssey] ......order based on Hashing
Hash Set contains : [2001, :, A, Space Odyssey, 2002, 0] ......order based on Hashing
Tree Set contains : [0, 2001, 2002, :, A, Space Odyssey] ......Ascending order.

显示方法在检查“X”是否是“Y”类的实例后打印输出。
第一个if-else 的输出是相同的,因为LinkedHashSet 扩展了HashSet。如何解决?

【问题讨论】:

  • 把最具体的类型(LinkedHashSet)先检查一下。

标签: java inheritance instanceof


【解决方案1】:

只需先测试子类LinkedHashSet,即

    if(myList instanceof LinkedHashSet)
        System.out.println("Hash Set contains : " + myList + " ......order based on Hashing");
    else if(myList instanceof HashSet)
        System.out.println("Linked List contains : " + myList + " ......In inserted order.");
    else if(myList instanceof TreeSet)
        System.out.println("Tree Set contains : " + myList + " ......Ascending order.");

【讨论】:

  • 该死,忍者。点赞。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
  • 2015-05-10
相关资源
最近更新 更多