Java:在不改变其类型的情况下乘以泛型数字

标签 java math numbers

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/

相关文章:

Java:JFileChooser 如何在文本字段中显示选定的文件

java - 如何通过翻转数组来翻转多边形?

java - 将文件中的所有数字解析为 BigDecimal Java

java - NoSuchAlgorithmException : TLSv1. 2 未知协议(protocol)

java - 使用返回类型参数类的方法实现接口(interface)

java - Java 程序的重心类

javascript - 如何将数字的值增加到 10、100、1000、10,000 等的下一个倍数

testing - 生成在 JMeter 中只出现一次的随机数

algorithm - 将数字分组到最接近的组

java - 寻求设计负载测试的帮助