リフレクションによるメソッドの呼び出しに基づいてオブジェクトのリストをハッシュするジェネリックメソッドを作成しようとしています。発呼者は、ハッシュ用のキーを生成するメソッドを指定できるという考え方です。私の問題は、@ SuppressWarnings( "unchecked")アノテーションを避けたいということです。したがって、本質的には、method.invokeを取得して、ObjectではなくタイプT2のオブジェクトを返す方法を見つけたいと思います。助けてくれてありがとう。
public static <T1, T2> HashMap<T2, T1> hashFromList(
List<T1> items_to_be_hashed,
String method_name_to_use_to_generate_key) {
HashMap<T2, T1> new_hashmap = new HashMap<>(items_to_be_hashed.size() + 5, 1);
for (T1 object_to_be_hashed : items_to_be_hashed) {
try {
//Call the declared method for the key
Method method = object_to_be_hashed.getClass().getDeclaredMethod(method_name_to_use_to_generate_key);
@SuppressWarnings("unchecked")
T2 key = (T2) method.invoke(object_to_be_hashed);
new_hashmap.put(key, object_to_be_hashed);
} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException exception) {
exception.printStackTrace();
}
}
return new_hashmap;
}