如何动态创建类/类型并将其传递给Map?

时间:2015-08-18 02:33:18

标签: java class dictionary

我正在尝试建立一个有趣的注册表,但我遇到了问题。 我想动态制作(获取)类/类型并将其传递给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;
    }
}

谢谢!

1 个答案:

答案 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);