我有一個運算符類,它有一些處理數學運算的類和方法。運算符類別是通用的,並且延伸數,所以我的操作可以與整數,雙精度浮點數,等等在Java中約束泛型類
public class OperatorClass<T extends Number>
在該類別有,它提供了號碼時使用計算操作的方法的抽象類方法
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();
}
}
而且我的數據集僅僅是一個數據類,看起來像這樣:
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()
不編譯因爲數字抽象類不能做+運營商。我如何讓我的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 對象,現在所有的操作都會上雙打。 –
這是可能的,但如果你想讓你的數字成爲對象,你需要實現算術運算的方法。像'+','''''''等等數學運算符只在內置類型上運行,它們不能在'Objects'上運行,只有'+'用來連接'Strings' 。 –
我只是用一些if語句來檢查數字是int,double,float等,然後從數字中得到int值,double值等,並進行了算術運算 –