gpt4 book ai didi

Java 泛型和简单类型

转载 作者:行者123 更新时间:2023-11-29 04:03:50 24 4
gpt4 key购买 nike

我试图编写一个通用类,它可以对任何简单类型(int、float 等)进行操作。我想避免通过更改参数类型多次重复相同的功能。但是由于泛型参数是一个引用,我无法对其类型的变量进行任何计算,就像在 C++ 模板中一样。

那么在Java中有什么简单的方法可以对泛型类型变量使用算术运算符吗?我知道我可以使用类检查和转换,但我认为这会增加更多代码,并且会影响性​​能。然而,我最近才开始用 Java 编写,所以我可能是错的。

最佳答案

抱歉,无法像在 C++ 中那样执行此操作。 Java 中的泛型与 C++ 模板的工作方式完全不同。在 Java 中,只会生成一个版本的泛型代码,并且它必须适用于所有类型的参数。因为所有原语在字节码中都有不同的表示,所以它们不能共享相同的通用代码。这就是为什么在 Java 中只有引用类型才是有效的类型参数。

我认为最接近的方法是使用 Number 类。自动装箱会自动将任何原始数值转换为 Number 的子类。例如:

class Foo<T extends Number> {
public void operate(T number) {
double value = number.doubleValue();
// do something with the double
}
}
Foo<Integer> intFoo = new Foo<Integer>();
intFoo.operate(666);
intFoo.operate(666.0); // fails to compile

但是类型参数并不能真正让你买账。如果您希望 operate 方法返回 T 类型的值,则必须求助于运行时检查,这与目的背道而驰。

一个可能有趣的旁注:Scala 2.8将支持注释 @specialize,它基本上告诉编译器“以 C++ 方式处理类型参数”,并为每个不同的类型参数表示生成不同版本的代码。

关于Java 泛型和简单类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1617843/

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