Java - 如何创建 Class<Map<Object,List<Object>>> 对象

标签 java class object reflection casting

如果这是一个菜鸟问题,我很抱歉。我有一个方法,它采用带有泛型类型的 Class 对象作为参数。我能够执行以下操作:

Class cs = Map.class;

但是当我通过这个时,我得到一个“NoSuchMethodException”,因为该方法已声明:

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

我尝试像这样转换它:

Class cs = (Class<Map<Object, List<Object>>>)(Class<?>)Map.class;

但我仍然遇到同样的异常。

有办法做到这一点吗?

我无法在这里发布完整的代码,但我已经重现了错误: 该应用程序实际上正在使用反射。我无法在这里发布原始代码,但我重现了异常:

import java.lang.reflect.Method;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Class c = null;
        try {
            c = Class.forName("Second");
        } catch (ClassNotFoundException e1) {
            e1.printStackTrace();
        }
        String m = "doSomething";
        Method method = null;
        Class cs = Map.class;
        try{
            method = c.getMethod(m, cs);
        } catch (NoSuchMethodException e){
            e.printStackTrace();
        }
    }
}

class Second{
    public static void doSomething(Class<Map<Object, List<Object>>> theclass){
        System.out.println("HERE I AM!");   
    }   
}

异常(exception):

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;

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

例如

(new HashMap<Object, List<Object>>()).getClass();

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

关于Java - 如何创建 Class<Map<Object,List<Object>>> 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12564704/

相关文章:

C# 使用多维列表在MySql服务器中发送数据

Java - 面板与框架大小相同

java - JSTL:检查字符串是否为空

java - 在与类和数据类型同名的方法中声明和初始化

java - 线程 : How do I know which thread a method runs in?

javascript - 我可以从嵌套对象创建新的 Javascript 对象吗?

java - 正则表达式在空格和换行符上分割文本?

Spring中的Java NoSuchMethodException(当我创建了一个构造函数时)

java - 从另一个类运行 GUI?

javascript - 当作为参数传递时,对象方法回调会丢失其在事件处理程序中的绑定(bind),但在硬编码时不会