2013-05-14 2 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, таких как с lass_file test = new class_file();

Выше всего фрагмент кода, в моем производственном коде значения в переменной String будут различаться и для каждого значения - другой файл класса (имя файла класса будет таким же, как имя переменной String) ,

Просьба предложить.

С уважением

+0

возможно дубликат [? Что такое правильный способ использовать отражение для создания экземпляров объектов неизвестных классов во время выполнения] (http://stackoverflow.com/q/7698237/2033671) –

ответ

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

в класс Объект, а затем используйте условия else, пока не найдете тип класса, содержащийся в объекте.

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

Надеюсь, это поможет. Извините, если я неправильно понял вашу потребность.

+0

Спасибо Майкл, ты понял это абсолютно правильно :). –

+0

Рад, что я помогу @VishalGarg! Если это не слишком много, любезно согласитесь с ответом, пожалуйста, спасибо :) –

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

И когда вы проверили свой ответ, он кажется очень похожим. Спасибо, я очень ценю это.

С уважением

Смежные вопросы