我正在尝试建立一个有趣的注册表,但我遇到了问题。 我想动态制作(获取)类/类型并将其传递给Map。
但它不会让我,因为它不是将变量名称解析为变量,而是将其作为类名称。
这是我的代码:
package com.anirudh.register;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Register implements IRegister {
public static boolean isPartOfAnotherRegister;
public static int priorityInAnotherRegister;
public static List<Map<String, Map>> mapList;
public Register(boolean isPartOfAnotherRegister, int priorityInAnotherRegister){
Register.isPartOfAnotherRegister = isPartOfAnotherRegister;
Register.priorityInAnotherRegister = priorityInAnotherRegister;
}
public static void addMapping(String s, int i, Object type1, Object type2){
}
public static void removeMapping(String s, int i, Object type1, Object type2){
}
public static void createNewMap(Object type1, Object type2){
Class<?> c1 = type1.getClass();
Class<?> c2 = type2.getClass();
Map<c1, c2> m;
}
}
谢谢!
答案 0 :(得分:1)
无法拥有Map<c1, c2>
类型的变量。但这是一个解决方法:使用类型参数创建一个新方法:
public static <T, U> Map<T, U> createMap(Class<T> tClass, Class<U> uClass) {
Map<T, U> map = new HashMap<T, U>();
// do stuff with the map here
return map;
}
然后使用Class对象作为参数调用它。但请注意,您返回后无法使用Map<T, U>
类型 - 您必须使用Map<?, ?>
Map<?, ?> map = createMap(c1, c2);