проблема с использованием отражения Java - PullRequest
1 голос
/ 21 января 2010

Предположим, я хочу написать функцию, которая будет создавать HashMap из некоторого указанного типа T в String, например, HashMap из Integer в String, следующим образом:

HashMap<Integer, String> myHashMay = new HashMap<Integer, String>();

Я хочу иметь flexibilty для указания типа T. Поэтому я пишу функцию как:

void foo(Class<?> myClass) {
    HashMap<myClass, String> myHashMay = new HashMap<myClass, String>();
    .......
}

так что если я вызову foo (Integer.class), внутри этой функции будет создан HashMap из Integer в String. Видимо, вышеупомянутая функция foo даже не компилируется. Кто-нибудь может дать мне несколько советов о том, как правильно написать такую ​​функцию с заданной сигнатурой функции.

Спасибо,

Ответы [ 2 ]

2 голосов
/ 21 января 2010
<T> void foo(Class<T> myClass) {
    HashMap<T, String> myHashMay = new HashMap<T, String>();
    ...
}

EDIT: Однако метод с такой сигнатурой не очень полезен, потому что T используется только для проверки типов во время компиляции. Я могу представить только один сценарий, когда его можно использовать:

<T> void foo(Class<T> myClass) {
    HashMap<T, String> myHashMay = new HashMap<T, String>();
    ...
    try {
        T key = myClass.newInstance();
        myHashMay.put(key, "Value");
    } catch (Exception ex) { ... }
    ...
}
1 голос
/ 21 января 2010

Эта функция создает карту, как вы пытаетесь сделать:

public <KeyType> Map<KeyType,String> createMapWithKeyType(Class<KeyType> keyType)
{
    return new HashMap<KeyType, String>();
}

Примечание: обратите внимание на комментарий Мэтта Б, он делает хорошее замечание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...