【发布时间】:2011-03-21 21:27:16
【问题描述】:
如果我有字段本身,是否可以通过 Java 反射获取字段?这是一个原始的浮动(公共,没问题)。我不想将其名称用作字符串。
例子:
public class TVset {
public float voltageA;
public float voltageB;
public float voltageC;
public TVset(...) {...} // constructor
public void function() {...} // it changes voltages
}
class Voltmeter{
Object theObject;
Field theField;
Voltmeter(Object obj) {
theObject = obj;
Class theFieldClass = obj.getClass();
Class theContainerClass = theFieldClass.getDeclaringClass();
Field theField = ??? // <-- here I don't want to use a String
}
float getVoltage() {
return theField.getFloat(theObject);
}
}
TVset tv1 = new TVset(...);
TVset tv2 = new TVset(...);
Voltmeter meter = new Voltmeter(tv1.voltageB);
meter.getVoltage();
tv1.function();
meter.getVoltage(); <- should reflect the changed voltage
tv1.function();
meter.getVoltage(); <- should reflect the changed voltage
...
效果类似于通过引用传递浮点数,但没有将其包装到包装类中。
我需要在不同的电视机上测量不同的电压,只需更换线路即可:
Voltmeter meter = new Voltmeter(tv1.voltageB);
到别的地方,比如:
Voltmeter meter = new Voltmeter(tv2.voltageA);
是否可以通过反射来做到这一点?
谢谢
【问题讨论】:
-
您能否详细说明“我不想使用字符串”?
-
我只是觉得写 new Voltmeter(tv2, "voltageA") 很难看,因为我确切地知道 TVset 中的字段是什么,我可以写 new(tv2.voltageA)。另外,如果我无意中写了 new(tv2.vltageA),编译器会在运行前对我大喊大叫。
标签: java reflection floating-point field primitive