Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何用它来实例化一个类';谁的字符串名?_Java - Fatal编程技术网

Java 如何用它来实例化一个类';谁的字符串名?

Java 如何用它来实例化一个类';谁的字符串名?,java,Java,我有一个类名数组: String[] myClasses = { "Hello", "World" }; 有没有一种方法可以用字符串名实例化一个类? 例如: public SomeClassType getMyClass(String className) { ??? } getMyClass("Hello"); // returns an instance of the Hello class getMyClass("World"); // returns an instance of

我有一个类名数组:

String[] myClasses = { "Hello", "World" };
有没有一种方法可以用字符串名实例化一个类? 例如:

public SomeClassType getMyClass(String className) {
  ???
}

getMyClass("Hello"); // returns an instance of the Hello class
getMyClass("World"); // returns an instance of the World class
ps:显然没有在所有字符串中循环

ps:Hello和World都扩展了某些类类型

String className=“MyClass”;
Class myClass=Class.forName(className);
MyClass ob=(MyClass)MyClass.newInstance();
您可以使用获取
类类型,然后使用
clazz.newInstance()
获取该类的实例

问题是您需要完整的限定名(类和包的名称),如果您没有完整的名称,您可以使用
反射
来迭代包并获得所需的类


您可以看到一个工作示例

看看Java反射教程()。以下是一个例子:

public class Hello {

    public void foo() {
        System.out.println("Inside Hello foo()...");
    }

    public static void main(String[] args) {
        Class<?> c;
        try {
            c = Class.forName("Hello");
            Hello h = (Hello) c.newInstance();
            h.foo();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

}
公共类你好{
公共图书馆{
System.out.println(“内部Hello foo()…”;
}
公共静态void main(字符串[]args){
丙级;;
试一试{
c=Class.forName(“你好”);
Hello h=(Hello)c.newInstance();
h、 foo();
}catch(classnotfounde异常){
e、 printStackTrace();
}捕获(实例化异常e){
e、 printStackTrace();
}捕获(非法访问例外e){
e、 printStackTrace();
}
}
}
可能的重复项和
public class Hello {

    public void foo() {
        System.out.println("Inside Hello foo()...");
    }

    public static void main(String[] args) {
        Class<?> c;
        try {
            c = Class.forName("Hello");
            Hello h = (Hello) c.newInstance();
            h.foo();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

}