java - 在 java 中实现一个简单的泛型函数时出现编译错误?

标签 java generics

这是我的代码:

public class ArrayAlgorithm {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        return ;
    }


    public static <T> T findMax(T[]a)
    {
        T max=a[0];
        for (T t : a) {
            if(max<t)   //this line generate compile error
                max=t;
        }
        return max;
    }

}

在线:if(max<t)生成错误:运算符 < 没有为参数 T 定义

在我搜索谷歌之后,似乎我应该做类似的东西,对于一个简单的任务来说太复杂了。因为我只想实现简单的 findmax(原始数组)。

有什么建议可以消除此编译错误或如何轻松实现这个简单的 findmax(原始数组)?

最佳答案

你的 findMax方法是通用的,使用声明的类型变量 T作为单个方法参数的类型。由于类型参数没有任何泛型边界,因此在方法中,最多可以将其视为 Object。 .

运营商< (及其亲属)不能应用于引用类型(某些 Number 子类型除外)。

泛型不适用于原始类型,因此您将无法使用原始类型数组调用您的方法。

您必须为每个基本类型数组重载该方法。

对于引用类型,确保它们是 Comparable通过向 T 添加绑定(bind)并使用 compareTo .

关于java - 在 java 中实现一个简单的泛型函数时出现编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26447035/

相关文章:

java - 通过List<>重载java方法

用于文本分析和计数的 Java 库

c# - IList在c#中使用协变和逆变,这可能吗?

Java 多态性 : How can I avoid type casting input parameters?

java - 如何在Java中删除句子中特定单词后面未指定数量的空格

java - 有什么方法可以在不更改 tomcat 配置的情况下为 UTF-8 编码 URL 中的特殊字符和其他字符

java - 用于查找嵌套代码块的正则表达式

C#继承开放泛型编译

具有泛型类的 Java 枚举

java - 在返回与其对象相同类型的值的 final方法中使用泛型