Java有没有办法实现这个方法?
public static <T extends Number> T doubleOf(T number){
//I don't know...
}
谢谢
最佳答案
正如其他答案中提到的,没有通用的解决方案。
除此之外,对于某些 Number
子类,您想要实现的操作可能没有很好地定义。例如,AtomicInteger
的倍数是多少?它是具有相乘值的同一实例吗?还是 AtomicInteger
的新实例?还是一个新的普通 Integer
?理论上,Number
的子类可能不允许自由创建新实例。
您可以测试一些已知子类的输入并为它们实现操作。像这样:
@SuppressWarnings("unchecked")
public static <N extends Number> N multiply(N number, int multiplier) {
Class<? extends Number> cls = number.getClass();
if (cls == Integer.class) {
return (N) Integer.valueOf(number.intValue() * multiplier);
}
if (cls == Long.class) {
return (N) Long.valueOf(number.longValue() * multiplier);
}
throw new UnsupportedOperationException("unknown class: " + cls);
}
恐怕有必要以某种形式抑制警告。
关于Java:在不改变其类型的情况下乘以泛型数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27107043/