0

以下是用例:

调用者类(带有 main 方法)

public class Invoker {
   public static void main(String[] args) {
          String class_file="Batch_Status";
      }
}

要调用的类(方法名与类名相同,例如在本例中为 Batch_Status)

import java.util.*;

public class Batch_Status {

    public static void Batch_Status(String args) {

     ......
     ......Code Goes Here
     ......   

    }
}

现在的问题是我无法通过使用字符串 class_file 的值(例如 class_file test = new class_file(); 来定义 Invoker 类中的任何对象,例如 test

以上只是一个片段,在我的生产代码中,String 变量中的值会有所不同,并且对于每个值,一个不同的类文件(类文件的名称将与 String 变量的值相同)。

请建议。

问候

4

2 回答 2

0

此代码演示了能够检索给定字符串的类实例:

String classString = "com.rbs.testing.Test";
    try {
        Class c = Class.forName(classString);
        Test test = (Test) c.newInstance();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }

如果你还不知道要投到哪个类,你可以转储

c.newInstance();

进入 Object 类,然后使用 if else 子句,直到找出对象中包含的类类型。

Object o =  c.newInstance();
if (o instanceof Test) {
} else if(o instanceof Test2) {

我希望这有帮助。抱歉,如果我误解了您的需求。

于 2013-05-15T02:23:52.697 回答
0

谢谢迈克尔,

事实上,在进行头脑风暴的同时,我也做了同样的事情,而且效果如愿。现在我也可以调用同样派生自同一个字符串变量的方法。以下是我尝试过的代码:

import java.lang.reflect.*;

import java.util.logging.*;
public class Invoker {
    public static void main(String[] args){
    try {
            String str ="Batch_Status";
            Class t = Class.forName(str);
            t.getMethods()[0].invoke(t,str);
        } catch (ClassNotFoundException | IllegalAccessException | InvocationTargetException ex) {
            Logger.getLogger(Invoker.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

当检查您的回复时,它似乎非常相似。谢谢,我真的很感激。

问候

于 2013-05-15T09:12:48.447 回答