【问题标题】:Java Reflection, Class ObjectsJava 反射,类对象
【发布时间】:2011-11-30 15:03:29
【问题描述】:

我的目标是在命令行中读入我希望观察信息的类的名称。当我在运行前知道类名时,我没有问题。我似乎无法管理的是如何根据字符串输入创建类对象。

public class Tester {

    static void methodInfo2(Object obj) throws ClassNotFoundException {
        //some stuff        
        System.out.print("Test!");

    }

    public static void main (String args[]) throws ClassNotFoundException{
        String className = args[0];
        System.out.println("Class:  "+className);

        //myclass2 mc = new myclass2();
        //Class c = mc.getClass();
        Class argClass = Class.forName(className);

        try {
            methodInfo2(argClass);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }


    }

}

main 方法中被注释掉的 2 行显示了我过去在编译之前知道类名时所做的事情。以下未注释的行显示了我认为应该工作的内容,但我收到了 ClassNotFoundException。这门课肯定存在,所以我不确定我遇到了什么问题。

【问题讨论】:

    标签: java class reflection


    【解决方案1】:

    两个建议:

    1. 确保为它提供完全限定的名称(例如 "java.lang.Thread" 而不仅仅是 "Thread")。
    2. 确保编译后的类文件确实在类路径中。

    【讨论】:

    • 感谢您的快速回复!对于那些后来发现这个话题的人来说,我的问题是我想要的类,我在 elcipse 的一个包中定义了自己。解决方法是将包名附加到类名的开头:“packageName.myclass2”
    【解决方案2】:

    Class.forName 是在运行时按名称加载类的正确方法。

    要么你的论点是错误的,要么你的类不在类路径中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-08
      • 2017-03-16
      • 2021-09-18
      • 2017-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多