在下面的代码中,我将printer1类型作为接口(IPrinter)类型,但实际上我希望它作为打印机类类型。
在JavaReflectionTrial.accessPrinter()中,我有2个将Slot作为参数,而不是打印机
是否可以将JavaReflectionTrial中的打印机作为打印机对象。
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();
}
}
如果你有一个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);
由于Slot中的printer字段是公共的,您应该能够以正常方式获取实例。(slot.printer1)