ヴェーラー:
私が使用されている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
不明です。
これを解決することができる一つの方法は、発信者がから変換する機能を提供できるようにすることですdouble
へT
。ここでは例を示します。
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());