JavaのジェネリックについてNumber.valueOf()の実装

ヴェーラー:

私が使用されているCollection数値およびいくつかの関連機能(マッピングのx> yの値、など)を実装しています。これまでのところ、私は、任意のサブクラスできるようにジェネリック医薬品の使用を作ってきたNumber中をCollection

この特定のクラスでは、私は、ジェネリックへのキャストに簡単な方法がないという問題に実行し続けます。以下のような通常の方法がDouble.valueOf()あるために起動することができないNumberような方法を提供していません。

この周りに良いの方法はありますか?

私が見つけたこの記事、それを解決するだろうと考えて、私は渡すことはできませんClass.classそれにパラメータを。

public class myList<T extends Number> extends Collection<T> {

  @Override
  public boolean add(T value){
    // this is no problem
  }

  // What I want to do:
  public boolean add(double value){
    return this.add(T.valueOf(value)); 
  }

  // Using the example I found:
  public void add(double value){
    return this.add( (T) Ideone.parse(value, T.class) ); // no such option
  }


}

前もって感謝します。

ernest_k:

以下のための方法はありませんmyListクラスが変換できるようにするdoubleには、Tため、T不明です。

これを解決することができる一つの方法は、発信者がから変換する機能を提供できるようにすることですdoubleTここでは例を示します。

public class myList<T extends Number> implements Collection<T> {

    private DoubleFunction<T> fromDoubleFunction;

    public myList(DoubleFunction<T> function) {
        this.fromDoubleFunction = function;
    }

    public boolean add(double value) {
        return this.add(this.fromDoubleFunction.apply(value));
    }

    //rest of code
}

それは、この方法で使用することができます。

myList<Integer> intList = new myList(d -> Double.valueOf(d).intValue());

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=239946&siteId=1