Java:基于字符串的加载类方法

时间:2013-05-25 20:28:27

标签: java

我在这里看到很多关于加载类的反射等等,我只是觉得这不是我想要的。 基本上,我想要的是一种动态加载类的方法。 所以喜欢:loadDynamicClass(“NameFromString”)。onStart();其中onStart()是我尝试加载的每个类中的方法。如果我错过了stackoverflow上的内容,只需将其标记为重复。

2 个答案:

答案 0 :(得分:1)

您可以使用Class.forName方法加载课程。

E.g。

(Cast) Class.forName("fully.qualified.class.Name").newInstance().yourMethod()

(演员) - 可以是yourMethod()

的类型

答案 1 :(得分:1)

鉴于这样的课程:

public class Foo
{
    public void bar()
    {
        System.out.println("Foo.bar");
    }

    public void car()
    {
        System.out.println("Foo.car");
    }
}

和这样的代码:

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Main
{
    public static void main(final String[] argv) 
        throws ClassNotFoundException, 
               NoSuchMethodException, 
               InstantiationException, 
               IllegalAccessException,
               IllegalArgumentException,
               InvocationTargetException 
    {
        final Class<?> clazz;
        final Method   method;
        final Object   instance;

        clazz = Class.forName(argv[0]);
        method = clazz.getMethod(argv[1] /*, types */);
        instance = clazz.newInstance();
        method.invoke(instance /*, arguments */);
    }
}

您可以这样运行:

java Main Foo bar
java Main Foo car

它将根据需要调用foo或bar方法。