2013-05-14 153 views
0

继派生的类的对象是用例:定义从一个字符串变量

调用器类(主要方法)

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如c不是能够定义的任何对象,例如在祈求类测试lass_file test = new class_file();

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

请建议。

问候

+0

可能重复:什么是使用反射在运行时实例化未知的类的对象的正确方法(http://stackoverflow.com/q/7698237/2033671) – 2013-05-14 17:21:26

回答

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

我希望这有助于。对不起,如果我误解你的需要。

+0

谢谢迈克尔,你明白它绝对正确:)。 – 2013-05-15 09:08:24

+0

很高兴能帮到@VishalGarg!如果不是太多,请接受答案,谢谢:) – 2013-05-15 13:26:50

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

而且当检查你的回复时,它似乎很相似。谢谢,我真的很感激。

问候

相关问题