Я строю что-то вроде графа потока данных с узлами и соединениями, которые передают данные между ними. Базовым классом в данном случае является
, у которого есть предыдущая и следующая цель для передачи данных туда и обратно. Другие классы расширяют этот класс для предоставления источников данных, объединения данных (например, умножения) и т. д.ValueTarget<T>
Теперь я хотел написать источник данных, который получает значение от любого заданного метода. Он принимает экземпляр java.lang.reflect.Method
(а также объект и параметры для его вызова) и использует его для установки данных:
@Override
public T getValue() {
if (valueCalculator != null) {
try {
Object result = valueCalculator.invoke(sourceObject);
T typedResult = (T)(result);
return typedResult;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return super.getValue();
}
Теперь я попробовал это с помощью метода public int getLength()
другого объекта. Однако на графике мне нужно сопоставить этот метод с результатом float
. Данное приведение типов не генерирует исключение, но при чтении последнего значения
и использовании его результата в качестве параметра ValueTarget<Float>
float
для другого метода происходит сбой программы с сообщением, что "java.lang.Integer не может быть приведен в java.lang.Float".
Теперь я знаю, что Integer и Float упакованы и поэтому не могут быть преобразованы в тип друг друга. Однако, поскольку все типы обрабатываются с помощью универсальных шаблонов, я не могу распаковать в определенный тип.
Есть ли способ выполнить общую распаковку, чтобы иметь возможность преобразовывать упакованные значения в соответствующие типы значений?