【问题标题】:method(E[]) is not applicable to the arguments(int[]) [duplicate]方法(E [])不适用于参数(int [])[重复]
【发布时间】:2016-02-29 09:22:25
【问题描述】:

我正在尝试在我的int[] 上实现我的排序方法,该方法将通用E[] 作为参数。我收到错误:

HeapSort 类型中的方法 sort(E[]) 不适用于参数 (int[])。

我的代码如下:

public <E extends Comparable<E>> void sort(E[] array){

//my code

}

public static void main(String[] args){
    int[] arr = new int[30];
    for(int rep = 0; rep < arr.length; rep++){
        arr[rep] =(int )(Math.random() * 100 + 0);
    }

    System.out.println("The unsorted Array: ");
    System.out.println(sort(arr).toString());
}

关于我为什么会收到此错误的任何想法?所有帮助表示赞赏!谢谢!

【问题讨论】:

  • System.out.println(sort(arr).toString()); 无效,因为此sort() 方法返回void。
  • 错误信息已经够清楚了。你有什么不明白的?

标签: java arrays generics


【解决方案1】:

原始类型不能替换泛型类型参数(即使可以,它也无法满足您的extends Comparable&lt;E&gt; 类型绑定,因为原始类型不扩展任何类并且不实现任何接口) .

您可以将int[] 替换为Integer[],它会起作用。

除了那个错误,sort(arr) 没有返回任何东西,所以你不能对它执行toString。

您可以将其替换为:

new HeapSort ().sort(arr); // you must create an instance of the class that contains
                           // the sort method in order to call it
System.out.println(Arrays.toString(arr));

【讨论】:

  • 非常感谢大家。我现在感觉有点愚蠢,因为这似乎是给定的。但是,我现在收到错误消息:“- 无法在数组类型 Integer[] 上调用 sort()”。感谢您的帮助
  • @A.Takami 您的排序方法应该是静态的吗?您的代码尝试从静态上下文(主要方法)调用它,而不创建包含 sort 的类的实例。
  • 我的排序方法不是静态的。是的,我只是想以任何方式打电话给我的sort。当我发布这个并没有真正三思而后行。从 main 调用我的非静态排序的正确方法是什么?
  • @A.Takami new HeapSort ().sort(arr);
  • 感激不尽。我是一名学生,真的只是想学习。
【解决方案2】:

让我们看看你在那里写了什么。

public <E extends Comparable<E>> void sort(E[] array)

这是一种称为排序的方法。它具有带有约束的通用参数。约束是,无论您输入什么泛型参数,它都必须实现 Comparable。

int 没有实现Comparable,实际上int 没有实现任何东西。

Java 泛型根本不适用于原始类型。泛型约束只会限制你更远。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 2019-12-18
    • 2017-08-15
    相关资源
    最近更新 更多