我一直在使用数值的Collection
,并实现了一些相关功能(映射 x->y 值等)。到目前为止,我已经使用泛型来允许 Collection
中包含 Number
的任何子类。
在这个特定的类中,我不断遇到这样的问题:没有简单的方法可以转换为泛型。无法调用像 Double.valueOf()
这样的常用方法,因为 Number
没有提供这样的方法。
有什么好的办法可以解决这个问题吗?
我找到了this post并认为这可以解决它,但我无法将 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
类无法将 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());
关于java - Java 泛型的 Number.valueOf() 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55657757/