如何区分两种不同类型的哈希表

时间:2013-10-22 11:18:18

标签: java generics

我有一个方法有两个参数,例如

computHash(HashTable hs, String myName){
    //compute hs data, it traverse the hashtable and create xml
    return xmlString;
}

我有一个名为Record的课程,

Class Record
{
    String Name;
    String FName;
    String Phone;

    //and its setter and getter.
}

现在我想要的是,如果我传递Hash <String, Record>,那么我想根据记录类成员创建xml。如果我通过<String, String>,那么我创建简单的xml。 我可以像"instance of"关键字那样做,如果是,那么如何。

3 个答案:

答案 0 :(得分:1)

泛型只在编译期间存在,没有查看条目就无法区分HashTable<String, Record>HashTable<String, String>

您必须获得一个条目,然后可以对其进行instanceof

答案 1 :(得分:1)

无法检测HashTable本身的类型。编译后的代码中不存在此信息,称为Type Erasure。您可以做的是检测HashTable内的一个值的类型。不幸的是,这不适用于emtpy Hashtable

答案 2 :(得分:0)

你可以做这样的事情,如果这是你所问的:

import java.util.Hashtable;

public class Test {

    public static void main(String[] args) {
        Hashtable<Integer, String> table1 = new Hashtable<Integer, String>();
        table1.put(0, "String");
        Hashtable<Integer, Record> table2 = new Hashtable<Integer, Record>();
        table2.put(0, new Record());
        System.out.println("Table 1:");
        someFunction(table1);
        System.out.println("Table 2:");
        someFunction(table2);
        Hashtable<Integer, Integer> table3 = new Hashtable<>();
        System.out.println("Table 3:");
        someFunction(table3);
    }

    static void someFunction(Hashtable hash) {
        if (hash != null && hash.size() > 0) {
            Object o = hash.elements().nextElement();
            if (o instanceof String) {
                System.out.println("It's a String!");
            } else if (o instanceof Record) {
                System.out.println("It's a Record!");
            }
        } else {
            System.out.println("It's an empty table and you can't find the type of non-existing elements");
        }
    }
}

class Record {
    String Name;
    String FName;
    String Phone;

    // and its setter and getter.
}

编辑:正如其他人指出的那样,Hashtable不能为空。然后你需要做一些像我刚刚在

中编辑的东西