使用Reflection实例化一个类

时间:2014-12-21 15:03:17

标签: java class object reflection

class Start
{
  public static void main( String[] argv ) 
  {
      int argc =argv.length;
      if ( argc == 0 ) {
          System.err.println( "error");
          return;
      }

      try 
      { 
          Class<?> c = Class.forName( argv[argv.length-1] );
          //c kowalski = c.newInstance( );   
      }
      catch ( Exception e ) { System.out.println(e) ; return; }
    }
}
class Test implements InfoInterface
{
    public void display()
    {
        System.out.println("HI!");      
    }
    static int w;
    public int dodawanie (int a, int b)
    {
        w=a+b;
        return w;
    }
}

我的问题是如何在Test课程中创建Start课程的对象? 必须通过命令行添加Test类 在这个程序中,我必须通过Test类中的对象从Start类获取方法。

2 个答案:

答案 0 :(得分:2)

您可以通过在命令行执行程序时在参数中传递具有完整类路径的类的名称来创建动态对象。

答案 1 :(得分:0)

您可以通过执行以下命令获取新的类实例:

Class<?> c = Class.forName(argv[argv.length-1]);
Test t = (Test) c.newInstance( );   

或者,如果您有更多InfoInterface个实施:

Class<?> c = Class.forName(argv[argv.length-1]);
if (!InfoInterface.class.isAssignableFrom(c)) {
    throw new Exception("Invalid interface specified");
}
Class<InfoInterface> iic = (Class<InfoInterface>) c;
InfoInterface ii = iic.newInstance();   

请注意,在

中使用的参数中指定完整的类名(包括包名)
Class<?> c = Class.forName(argv[argv.length-1]);

线。您当然也可以自己添加包字符串:

String command = argv[argv.length-1];
Package p = InfoInterface.class.getPackage();
if (p != null) {
    command = p.getName() + "." + command;
}
Class<?> c = Class.forName(command);

假设Test和其他命令与InfoInterface位于同一个包中。