通过java反射在另一个类中通过接口声明的对象的访问方法

时间:2012-02-01 14:04:51

标签: java reflection interface

在下面的代码中,我将printer1类型作为接口(IPrinter)类型,但实际上我希望它作为打印机类类型。

在JavaReflectionTrial.accessPrinter()中我有2个Slot作为参数而不是打印机

是否可以将JavaReflectionTrial中的打印机作为Printer对象。

interface IPrinter {
  void enable();
}

class Printer implements Iprinter {
  void enable() {
  //doSomething;
  }
}

class Slot {
  public IPrinter printer1 = new Printer();
}

class JavaReflectionTrial {
  accessPrinter(Slot slot) {
    class cls=slot.getclass();
    field[] fields=cls.getfields();
  }
}

2 个答案:

答案 0 :(得分:0)

如果您有一个Slot对象并且通过反射想要获得其printer1成员变量,那么您应该能够这样做:

Class<?> cls = slot.getClass();
Field field = cls.getDeclaredField("printer1");

// Get the value of the printer1 member variable in slot
Printer printer = (Printer)field.get(slot);

答案 1 :(得分:0)

由于Slot中的printer-field是公共的,因此您应该能够以正常方式获取实例。 (slot.printer1)