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());