gpt4 book ai didi

java - 通用数字的算术

转载 作者:行者123 更新时间:2023-12-01 22:36:10 24 4
gpt4 key购买 nike

所以我必须接受一个泛型类型 T,它将是一个数字基元的包装类,并用它做一些算术。我认为由于自动装箱和拆箱,这将是微不足道的:

T newval = val1*val2;

(其中 val1 和 val2 已经是 T 类型的变量,其中包含适当的值。)

但事实证明,如果 Java 在编译时不明确知道类型,则它不会拆箱值。我还认为我可以使用每个 Number 子类(我打算使用)中的乘法方法。所以我用以下方式声明了我的类(class):

public class SomeClass<T extends Number> {
// ...
}

然后:

T newval = val1.multiiply(val2);

但这不起作用,因为我猜并不是所有 Number 的子类都需要(为什么他们不为此使用接口(interface)?)来拥有该方法(但我想使用 DO 的所有子类。)

我见过一些类似的问题,但它们都导致OP被告知不要使用泛型,但我要求在我正在做的工作中使用泛型,否则整个事情毫无值(value)。有人能想到一个适合我的解决方案吗?

编辑:好的,所以他回复我并澄清了意思,它已经足够不同了,我的问题不再与我正在做的事情相关。谢谢大家。

最佳答案

各种算术运算符只能应用于可转换为基本类型的类型的值。无法用泛型来表达该要求。因此泛型不适合这项任务。

对于泛型方法,请改为提供数字基元类型的重载。对于泛型类,提供使用特定数字类型的子类。

class NumericCalculator<T> {
public void calculate(T one, T two) {
T result = one * two; // compiler error
}
}

class LongCalculator extends NumericCalculator<Long> {
public void calculate(Long one, Long two) {
Long result = one * two; // yes
}
}

使用运算符的实现必须位于知道实际类型的子类中。

关于java - 通用数字的算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26851492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com