1

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

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"关键字一样做吗,如果是,那么如何。

4

3 回答 3

1

泛型仅在编译时存在,不查看条目就无法区分 aHashTable<String, Record>和 a 。HashTable<String, String>

您必须获得一个条目,然后才能instanceof对其进行操作。

于 2013-10-22T11:24:32.857 回答
1

无法检测到HashTable自身的类型。此信息不存在于已编译的代码中,称为Type Erasure. 您可以做的是检测HashTable. 不幸的是,这不适用于 emtpy Hashtable

于 2013-10-22T11:25:19.237 回答
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.
}

编辑:正如其他人所指出的,哈希表不能为空。然后你需要做一些我刚刚编辑的事情

于 2013-10-22T11:34:02.803 回答