Чтобы использовать отражение, вы должны использовать строку.Вместо использования float вы можете использовать объект для переноса изменяемого float или простого float [1];
Кстати, я бы не использовал float, если у вас нет действительно веских причин, double страдает гораздо меньшей ошибкой округления.
public class TVset {
public double[] voltageA = { 0.0 };
public double[] voltageB = { 0.0 };
public double[] voltageC = { 0.0 };
}
class Voltmeter{
final double[] theField;
Voltmeter(double[] theField) {
this.theField = theField;
}
double getVoltage() {
return theField[0];
}
}
// works just fine.
Voltmeter meter = new Voltmeter(tv1.voltageB);
РЕДАКТИРОВАТЬ: Использование абстрактного метода доступа.Это самый быстрый способ сделать это.AFAIK, разница составляет менее 10 наносекунд.
public abstract class Voltmeter{ // or use an interface
public abstract double get();
public abstract void set(double voltage);
}
public class TVset {
private double _voltageA = 0.0;
private double _voltageB = 0.0;
private double _voltageC = 0.0;
public final Voltmeter voltageA = new Voltmeter() {
public double get() { return _voltageA; }
public void set(double voltage) { _voltageA = voltage; }
}
public final Voltmeter voltageB = new Voltmeter() {
public double get() { return _voltageB; }
public void set(double voltage) { _voltageB = voltage; }
}
public final Voltmeter voltageC = new Voltmeter() {
public double get() { return _voltageC; }
public void set(double voltage) { _voltageC = voltage; }
}
}
Лично, если скорость критична, я бы просто использовал поля непосредственно по имени.Вы не станете проще или быстрее, чем это.