繁体   English   中英

在Java中使用字符串创建类对象时出错

[英]Error while creating class object using string in java

创建使用Class.forName()的对象时,出现以下错误。 您能确认我做错了吗?

Exception in thread "main" java.lang.ClassNotFoundException: ABC
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at RandomPrograms.ClassObjectFromString.main(ClassObjectFromString.java:32)

ClassObjectFromString.java

import java.lang.reflect.Constructor;

class ABC {
    ABC() {
        System.out.println("ABC called!!! ");
    }
    ABC(String a) {
        System.out.println("ABC called : " + a);
    }
}

class ClassObjectFromString {

    public static void main(String[] args) throws Exception {
        Class<?> clazz = Class.forName("ABC");
        Constructor<?> ctor = clazz.getConstructor(String.class);
        Object object = ctor.newInstance(new Object[] { "Message" });
    }
}
public static Class<?> forName(String className)

提供所需类的标准名称,其中也包括您的软件包名称。 因此,我们将使用RandomPrograms.ABC

这里有些错误:

  1. 您需要以“ packageName.className”形式使用完全限定的类名。
  2. 您的构造函数需要声明为公开才能进行反思。

因此您的代码应如下所示(假设程序包名称是RandomPrograms,请根据需要替换为您的程序):

public class ClassObjectFromString {

    public static void main(String[] args) throws Exception {
        Class<?> clazz = Class.forName("RandomPrograms.ABC");
        Constructor<?> ctor = clazz.getConstructor(String.class);
        Object object = ctor.newInstance(new Object[] { "Message" });
    }

}

class ABC {
    public ABC() {
        System.out.println("ABC called!!! ");
    }
    public ABC(String a) {
        System.out.println("ABC called : " + a);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM