简体   繁体   English

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

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

While creating an object of using Class.forName() I am getting following Errors. 创建使用Class.forName()的对象时,出现以下错误。 Can you please confirm where I am doing wrong. 您能确认我做错了吗?

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

Provide the fully qualified name of the desired class which includes your package name too. 提供所需类的标准名称,其中也包括您的软件包名称。 So it will we RandomPrograms.ABC 因此,我们将使用RandomPrograms.ABC

There are a few things wrong here: 这里有些错误:

  1. You need to use the fully qualified class name in the form 'packageName.className'. 您需要以“ packageName.className”形式使用完全限定的类名。
  2. Your constructors need to be declared public for reflection to work. 您的构造函数需要声明为公开才能进行反思。

So your code should look like (assuming package name is RandomPrograms, replace with yours as needed): 因此您的代码应如下所示(假设程序包名称是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