我们有两个几乎相同的进程类,除了一个用于处理 float[] 数据,另一个用于处理 int[] 数据。
我想把它们合二为一。我最初的想法是对 float[] 和 int[] 使用泛型。
Java 泛型对我来说是新的。所以我编写了以下测试方法来查看泛型如何工作,但我无法让它为我工作。
public <T> T caculate(T[] values)
{
T result;
for(int i = 0; i < values.length; i++)
{
result = result + values[i];
}
result = result/(values.length);
return result;
}
有人可以帮我修改上面的方法吗? float 和 int 是 Java 中的原始类型。可能上面的方法不对。
最佳答案
We have two process classes which are almost identical except One is used to process a
float[]
data and another is for aint[]
data.
不幸的是,您不能使用泛型来做到这一点。您最好的选择是咬紧牙关,分别对这两个类进行编码;即没有泛型。
理论上,您可以尝试将数组更改为 Integer[]
和 Float[]
和改变<T>
至 <T extends Number>
.然而:
这可能涉及更改代码的其他部分。
它可能会使您的处理代码变慢。
使用
T extends Number
可能很难以通用方式表达您的处理算法.首先,Number
接口(interface)不支持算术。
我想也可以通过将原始数组包装在某个类中使它们看起来像(比方说)整数数组来解决这个问题。但这可能会给您带来截断、精度等方面的问题……具体取决于您正在实现的算法。所以这只会在有限的情况下起作用。
关于java - 我可以对 float[] 和 int[] 使用泛型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6012974/