gpt4 book ai didi

java - Java 泛型的 Number.valueOf() 实现

转载 作者:行者123 更新时间:2023-11-30 07:41:47 24 4
gpt4 key购买 nike

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com