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

标签 java generics casting numbers

我一直在使用数值的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/

相关文章:

c# - 如何将两个相似的具体对象传递给具有在 C# 中实现泛型的接口(interface)参数的方法?

java - 关于哈希表中 doublevalue() 的混淆

java - 正在发送短信 : User 10074 does not have android. 权限.SEND_SMS

java - 使用 Java append 到压缩流

java - BufferedImage 类型中的方法 getRGB(int, int) 不适用于参数 (..)

c# - 使用 unity xml config 向嵌套泛型注册接口(interface)

java - 创建玩家乒乓 block 时的类(class)组织问题

swift - 为什么我可以用泛型在 swift 中提出相同类型的要求?有什么办法吗?

c++ - 通过取消引用在 C 中转换变量

string - 将字符串转换为 uint16