Java 新手通用参数估计&书信电报;T>;

Java 新手通用参数估计&书信电报;T>;,java,Java,好吧,那么我能以某种方式做到这一点吗: String myString = "someString"; Class myClass = myString.getClass(); HashMap<mClass, Integer> = new HashMap<myClass, Integer>(); String myString=“someString”; 类myClass=myString.getClass(); HashMap=新的HashMap(); 所以我想创

好吧,那么我能以某种方式做到这一点吗:

String myString = "someString";
Class myClass = myString.getClass();

HashMap<mClass, Integer> = new HashMap<myClass, Integer>();
String myString=“someString”;
类myClass=myString.getClass();
HashMap=新的HashMap();
所以我想创建一个新的hashmap,使用我的变量键的类类型,比如Integer或String…

,因为这样做不起作用。 一种可能的(但更详细的方法)是创建一个工厂方法,该方法根据传递的参数返回映射,例如:

MapFactory.create(String.class);
编辑:在回答@millimoose关于这与直接实例化(这是真的)没有区别的评论时:


您可以尝试实现自己的映射,或者修饰或扩展HashMap实现,使其保留类型信息。

这是不可能的。我将介绍各种可能性

可以使用泛型创建助手方法。这将起作用,因为所有泛型都编译成简单的
对象
s

public static <T> Map<T, Integer> createMap(Class<T> cl)
{
    return new HashMap<T, Integer>();
}
公共静态映射createMap(类别cl)
{
返回新的HashMap();
}
现在,您可以这样使用它:

Map<String, Integer> map = createMap(String.class);
Map-Map=createMap(String.class);
然而,这将要求您在编译时知道T是什么。所以这是行不通的:

String str = "Test";
Class cl = str.getClass();
Map<String, Integer> map = createMap(cl); // Doesn't compile.
String str=“Test”;
Class cl=str.getClass();
地图地图=创建地图(cl);//不编译。
因此,总而言之,这个helper方法一文不值,因为您可以简单地编写:

Map<String, Integer> map = new HashMap<String, Integer>();
Map Map=newhashmap();

这是不可能的。泛型是一种编译时构造,它们表示高阶类型约束。是的,我知道它不是编译。我只是想告诉你我想做什么。你想做什么在Java的类型系统中没有意义。没有意义。这根本没有任何意义。谢谢你想用什么来对比地图?请给出一个实际的例子,说明您正在尝试做什么。当然,这与
newhashmap()
相比没有任何好处。在创建映射的编译时,仍然必须知道该类型?extends T构造在这里似乎非常无用。