java7のBigDecimalの演算子オーバーロードに関する希望
「わんくま同盟」の方のサイトにあったC#の例のような、
演算子ラッパーメソッドとか提供されるとうれしいな。
java7が以下のような感じの実装とか希望。
abstract class Operator extends Number {
T add(T t){} // +
T negate(T t){} // -
T divide(T t){} // /
T mulutipry(T t){} // *
T modify(T t){} // %
}
class Integer extends Operator {
...
}
上記のようなOperatorインタフェースを継承すると演算子で記述しても
以下のメソッドに展開し処理する仕組み希望。 コンパイラは以下のインタフェースを継承以外は演算子として解釈しない
とか。
そしたらこんなファンクタ作れるかも?
interface Function {
R apply(T);
}
class Plus implements Function {
R apply(T t) {
return t + t;
}
}
class Client {
public void main(String[] args) {
Loop.foreach(new Integer[] {1,2,3,4}, new Plus());
Loop.foreach(new Double[] {1.1,2.2,3.3,4.4}, new Plus());
}
}
jadでPlus.classファイル開くとこんなイメージ。
class Plus implements Function {
Object apply(Object t) {
return this.apply((Operator)t);
}
Operator apply(Operator t) {
return t.add(t);
}
}
だったらいいなあ。
大体、BigDecimalにある演算子のラッパーメソッドを他の
プリミティブ型ラッパークラスに用意してくれれば、演算子オーバーロードはいらないのだけど。
演算子ラッパーメソッドとか提供されるとうれしいな。
java7が以下のような感じの実装とか希望。
abstract class Operator
T add(T t){} // +
T negate(T t){} // -
T divide(T t){} // /
T mulutipry(T t){} // *
T modify(T t){} // %
}
class Integer extends Operator
...
}
上記のようなOperatorインタフェースを継承すると演算子で記述しても
以下のメソッドに展開し処理する仕組み希望。 コンパイラは以下のインタフェースを継承以外は演算子として解釈しない
とか。
そしたらこんなファンクタ作れるかも?
interface Function
R apply(T);
}
class Plus
R apply(T t) {
return t + t;
}
}
class Client {
public void main(String[] args) {
Loop.foreach(new Integer[] {1,2,3,4}, new Plus
Loop.foreach(new Double[] {1.1,2.2,3.3,4.4}, new Plus
}
}
jadでPlus.classファイル開くとこんなイメージ。
class Plus implements Function {
Object apply(Object t) {
return this.apply((Operator)t);
}
Operator apply(Operator t) {
return t.add(t);
}
}
だったらいいなあ。
大体、BigDecimalにある演算子のラッパーメソッドを他の
プリミティブ型ラッパークラスに用意してくれれば、演算子オーバーロードはいらないのだけど。
コメント