Java:returns 一个 Long 作为 Number 子类型的泛型

Java: A generic that returns a Long as a subtype of Number

我正在寻找一种方法将 long 或 Long 转换为从 Number 派生的类型:

public class IdentityConverter<ConvertedT extends Number> implements IBitcodeConverter<ConvertedT> {
    public IdentityConverter() {
    }

    @Override
    public ConvertedT FromBitcode(Long theBitcodeVal) {
        return new ConvertedT(theBitcodeVal.longValue());
    }

    @Override
    public Long ToBitcode(ConvertedT theConvertedVal) {
        // TODO Auto-generated method stub
        return theConvertedVal.longValue();
    }

}

问题是 FromBitcode 方法。当前代码不起作用。我如何从 Long 中得到 ConvertedT 而不是 Number?当然有一个简单的方法可以做到这一点...

new ConvertedT 将不起作用,因为 ConvertedT 是类型变量。

您需要向 IdentityConverter 的构造函数提供类似 Function<Long, ConvertedT>(或 LongFunction<ConvertedT>)的内容,以便能够构造正确的东西。

public class IdentityConverter<ConvertedT extends Number> implements IBitcodeConverter<ConvertedT> {
    private final Function<Long, ConvertedT> fn;

    public IdentityConverter(Function<Long, ConvertedT> fn) {
      this.fn = fn;
    }

    @Override
    public ConvertedT FromBitcode(Long theBitcodeVal) {
        return fn.apply(theBitcodeVal);
    }

    // ...
}