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にある演算子のラッパーメソッドを他の
プリミティブ型ラッパークラスに用意してくれれば、演算子オーバーロードはいらないのだけど。
 
 

コメント

このブログの人気の投稿

日食ツアーその後

NashornがOpenJDKのリポジトリに入ってたのでビルドしてみた

Javaのクロージャをいじってみた。(1)