爪哇 - 如何创建一个类 (Java - How to create a Class>>

2019-10-17 05:56发布

我很抱歉,如果这是一个小白的问题。 我有这需要一个类对象与通用类型作为参数的方法。 我能做到以下几点:

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!");   
    }   
}

例外:

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)

Answer 1:

如果你正在做这样的铸造,我认为你对抗是旨在帮助您类型系统。 对于初学者,

Class cs = Map.class;

原始类型(见这里获取更多信息)。 您是否尝试实例化一个类你需要的Map类型,并通过类的为您功能?

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

注意:如ruakh如上面的评论中指出,你必须通过Map接口的实例,因此上述方法声明将禁止这一点。 基本上有一个基本的API设计问题在这里!



Answer 2:

得到它了! 我已经改变了下面一行:

method = c.getMethod(m, cs);

至:

method = c.getMethod(m, cs.getClass());

现在,它的作品!



文章来源: Java - How to create a Class>> object