Java泛型的Number.valueOf()实现

Java泛型的Number.valueOf()实现,java,generics,casting,numbers,Java,Generics,Casting,Numbers,我一直在使用数值的集合,并实现了一些相关功能(映射x->y值等)。到目前为止,我已经使用泛型来允许集合中Number的任何子类 在这个特殊的类中,我一直遇到这样一个问题:没有简单的方法可以转换为泛型。无法调用像Double.valueOf()这样的常用方法,因为Number不提供这样的方法 有什么好办法吗 我发现并认为这可以解决它,但我无法将Class.Class参数传递给它 public class myList<T extends Number> extends Collecti

我一直在使用数值的
集合
,并实现了一些相关功能(映射x->y值等)。到目前为止,我已经使用泛型来允许
集合中
Number
的任何子类

在这个特殊的类中,我一直遇到这样一个问题:没有简单的方法可以转换为泛型。无法调用像
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
  }


}
公共类myList扩展了集合{
@凌驾
公共布尔加法(T值){
//这没问题
}
//我想做的是:
公共布尔加法(双值){
返回此值。添加(T.valueOf(value));
}
//使用我发现的示例:
公共无效添加(双倍值){
返回this.add((T)Ideone.parse(value,T.class));//没有这样的选项
}
}
提前感谢。

为类提供一个构造函数参数

public class myList<T extends Number> extends Collection<T> { 
  private final DoubleFunction<T> theDoubleFn;

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

  // ...

在方法中,

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实现集合{
私有双重功能来自双重功能;
公共myList(双功能){
this.fromDoubleFunction=函数;
}
公共布尔加法(双值){
返回this.add(this.fromDoubleFunction.apply(value));
}
//代码的其余部分
}
然后可以这样使用:

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

Unrelated:如果您有一两分钟的时间,请看一下并告诉我您对该问题的两个答案的看法。
myList<Integer> intList = new myList(d -> Double.valueOf(d).intValue());