ノードとそれらの間でデータを渡す接続を使用して、データフローグラフのようなものを構築しています。この場合の基本クラスは です
。これには、データをやり取りするための前のターゲットと次のターゲットがあります。他のクラスは、このクラスを拡張して、データのソースを提供したり、データをマージしたりします (乗算など)。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
結果にマップする必要があります。指定された型キャストは例外をスローしませんが、 last
の値を読み取り、その結果ValueTarget<Float>
float
を別のメソッドへのパラメーターとして使用すると、プログラムがクラッシュし、「java.lang.Integer は java.lang.Float にキャストできません」というメッセージが表示されます。 "。
今、私は Integer と Float がボックス化されているため、互いの型にキャストできないことを認識しています。ただし、型はすべてジェネリックを使用して処理されるため、特定の型にボックス化を解除することはできません。
ボックス化された値を対応する値の型にキャストできるようにするために、一般的なボックス化解除を実行する方法はありますか?