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);
}
// ...
}
我正在寻找一种方法将 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);
}
// ...
}