2013-05-14 134 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); 
     } 
    } 
} 

而且當檢查你的回覆時,它似乎很相似。謝謝,我真的很感激。

問候