【问题标题】:Problem bubbleSorting generic type in JavaJava中的问题冒泡排序泛型类型
【发布时间】:2020-04-15 17:58:24
【问题描述】:

对泛型有混淆/问题。我只想能够对任何类型的数组进行排序和打印,这些数组是 Number 类或 Number 的子类。我先写了 printArray 方法,效果很好。然后我编写了 bubbleSort 方法,但是在构造函数中调用它时遇到问题。有什么帮助吗?

public class DAB_NumberAnalyzer<T extends Number>
{
    private T[] array;

    /**
     * Constructor
     * @param array
     */
    public DAB_NumberAnalyzer(T[] array)
    {
        this.array = array;

        bubbleSortArray(array);
        printArray(array);
    }

    public static <T> void printArray(T[] array)
    {
        for(T element : array)
        {
            System.out.printf("%s, ", element);
        }
        System.out.println("");
    }

    public static <T extends Comparable<T>> void bubbleSortArray(T[] array)
    {
        int lastPos;
        int index;
        T temp;

        for(lastPos = array.length - 1; lastPos >= 0; lastPos--)
        {
            for(index = 0; index <= lastPos - 1; index++) 
            {
                if(array[index].compareTo(array[index]) > 0)
                {
                    temp = array[index];
                    array[index] = array[index + 1];
                    array[index + 1] = temp;
                }
            }
        }
    }
}

在构造函数中,我在调用 bubbleSortArray 方法的那一行出现错误。

错误:DAB_NumberAnalyzer 类型中的方法 bubbsleSortArray(T[]) 不适用于参数 (T[])。

不明白我是如何在调用 printArray 方法时没有收到此错误的。

我是不是把东西放错地方了?

刚开始使用泛型,还是有点模糊,不胜感激!

【问题讨论】:

  • 我要说的第一件事是不要混合Class generic T和Method generic T,你使用的是相同的符号,可能你认为你可以将一个用于另一个,但它们是不同的,这个这就是您收到该错误的原因。如果您从方法签名中删除静态和方法泛型,您可以实现。并且可以使用 Comparator 进行比较。

标签: java arrays generics methods


【解决方案1】:

bubbleSortArray 期望 T 扩展 Comparable&lt;T&gt;。你班级的T 扩展了Number,它不扩展Comparable。您可以将您的班级声明更改为DAB_NumberAnalyzer&lt;T extends Number &amp; Comparable&lt;T&gt;&gt;

【讨论】:

  • 这确实做到了!非常感谢
猜你喜欢
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2020-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多