私は、数学演算を扱ういくつかのクラスとメソッドを持つ演算子クラスを持っています。演算子クラスは、数値が計算に使用時に動作させる方法を提供する抽象クラスが存在し、このクラスで等Javaのジェネリッククラスを制限する
public class OperatorClass<T extends Number>
、ジェネリックであり、私の操作はint型とすることができるように、番号を拡張し、倍増、浮い方法
abstract class Op<T extends Number> {
abstract T calculate(DataSet<? extends Number> ds);
}
例えばAddOpのようなオペアンプを拡張し、複数のクラスがあります。
class AddOp<T extends Number> extends Op<T>{
public T calculate(DataSet<? extends Number> ds) {
return ds.getLeft() + ds.getRight();
}
}
そして、私のDataSetは、このように見えるだけで、データクラスです。
public class DataSet<T extends Number> {
private T left;
private T right;
public DataSet(T left, T right) {
this.left = left;
this.right = right;
}
public T getLeft() {
return left;
}
public T getRight() {
return right;
}
}
私が午前の問題は、数抽象クラスは、+演算子を行うことができないので、ラインds.getLeft() + ds.getRight()
がコンパイルされていないということです。どのように私はそれの数学演算を行うことができます(ワイルドカードクラスのような)Numberの型に私のDataSetを取得するのですか?
すべてのヘルプは おかげ
編集
だから、問題の回避策は、私はいくつかのif文を使用して、そう
Number result = null;
if(ds.getLeft().getClass().equals(Integer.class))
result = new Integer(ds.getLeft().intValue() + ds.getRight().intValue());
....
return (T) result;
私はそれが可能かどうかわかりませんが、私はOperatorClassを持つことができるようにしようとしていますそしてすべての操作は整数になり、後でOperatorClassオブジェクトを作成して、ダブルスにいる。 –
数値をオブジェクトにしたい場合は、算術演算のメソッドを実装する必要があります。 '+'、 '-'、' * 'などの数学演算子はビルトイン型でしか機能せず、' + 'が' Strings'を連結するという唯一の例外を除いて 'Objects'では機能しません。 –
私はいくつかのifステートメントを使って、数値がint、double、floatなどであるかどうかをチェックし、数値からint値、double値などを得て算術演算を行った –