java - 我可以对 float[] 和 int[] 使用泛型吗?

标签 java

我们有两个几乎相同的进程类,除了一个用于处理 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 a int[] data.

不幸的是,您不能使用泛型来做到这一点。您最好的选择是咬紧牙关,分别对这两个类进行编码;即没有泛型。

理论上,您可以尝试将数组更改为 Integer[]Float[]和改变<T><T extends Number> .然而:

  • 这可能涉及更改代码的其他部分。

  • 它可能会使您的处理代码变慢。

  • 使用 T extends Number 可能很难以通用方式表达您的处理算法.首先,Number接口(interface)不支持算术。


我想也可以通过将原始数组包装在某个类中使它们看起来像(比方说)整数数组来解决这个问题。但这可能会给您带来截断、精度等方面的问题……具体取决于您正在实现的算法。所以这只会在有限的情况下起作用。

关于java - 我可以对 float[] 和 int[] 使用泛型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6012974/

相关文章:

java - 下载 PDF 不起作用

java - 使用引用库在 Eclipse 中导出不可执行的 jar

java - Java 中的抽象工厂模式——填充数组的问题

java - ScrollView 总是滚动到底部

java - 在java中保留Timer.schedule的调用堆栈

java - 创建用于运行报告的 DropWizard 微服务。

java - 我需要列出使用 java.lang.ApplicationShutdownHooks 注册的钩子(Hook)

java - 使用来自的其余 Web 服务从数据库下载文件

java - Spring 数据休息:How to select specific field from the repository

java - 使用 Java 小程序将图像保存到服务器