Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java—如何创建类<;地图<;对象、列表<;对象>&燃气轮机&燃气轮机;对象_Java_Class_Object_Reflection_Casting - Fatal编程技术网

Java—如何创建类<;地图<;对象、列表<;对象>&燃气轮机&燃气轮机;对象

Java—如何创建类<;地图<;对象、列表<;对象>&燃气轮机&燃气轮机;对象,java,class,object,reflection,casting,Java,Class,Object,Reflection,Casting,如果这是一个无意义的问题,我很抱歉。我有一个方法,它将泛型类型的类对象作为参数。我能够做到以下几点: Class cs = Map.class; 但当我传递此消息时,会得到一个“NoSuchMethodException”,因为该方法已声明: public void doSomething(Class<Map<Object, List<Object>>> theclass){ ... } 如果你在做这样的演员,我认为你是在与设计来帮助你的类型系统

如果这是一个无意义的问题,我很抱歉。我有一个方法,它将泛型类型的类对象作为参数。我能够做到以下几点:

Class cs = Map.class;
但当我传递此消息时,会得到一个“NoSuchMethodException”,因为该方法已声明:

public void doSomething(Class<Map<Object, List<Object>>> theclass){
...     
}

如果你在做这样的演员,我认为你是在与设计来帮助你的类型系统作斗争。首先

Class cs = Map.class;
是原始类型(有关详细信息,请参阅)。您是否尝试过实例化所需的
Map
类型的类,并将该类传递给函数

e、 g

(新的HashMap()).getClass();

注意:正如上面注释中提到的ruakh,您必须传递Map接口的一个实例,因此上面的方法声明将禁止这样做。基本上这里有一个基本的API设计问题

明白了!我更改了以下行:

method = c.getMethod(m, cs);
致:


现在它工作了

您正在尝试对抗类型擦除。请检查是什么语句引发了异常?请向我们展示导致引发异常的代码。简单地将错误的
对象作为方法参数传递不会导致它发生。您一定在做其他事情。请注意,
public void doSomething(Class theclass)
不是一个有用的方法签名,因为它要求
Class
正好是表示
Map
的类,因此只有一个非
null
值可以传递给该方法。也许您想编写
public void doSomething(class但是,由于不变性,所列出的方法不会接受这样的参数。(请参阅我上面的评论。)
cs.getClass()
可以更好地编写
Class.Class
@TomHawtin-tackline,前提是
cs
是类文本,否则
getClass
就可以了。
java.lang.NoSuchMethodException: Second.doSomething(java.util.Map)
    at java.lang.Class.throwNoSuchMethodException(Class.java:283)
    at java.lang.Class.getMethod(Class.java:825)
    at Main.main(Main.java:16)
Class cs = Map.class;
(new HashMap<Object, List<Object>>()).getClass();
method = c.getMethod(m, cs);
method = c.getMethod(m, cs.getClass());