首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >对Java中的泛型元素数组进行排序

对Java中的泛型元素数组进行排序
EN

Stack Overflow用户
提问于 2014-09-19 00:53:02
回答 3查看 1.1K关注 0票数 0

我的Java程序中有一个泛型类,类型可以是Double或Integer。我需要编写一个函数,它首先需要对泛型类型的值数组进行排序。我得到了以下异常,我不确定如何修复它。如果有任何帮助,我将不胜感激。

代码语言:javascript
代码运行次数:0
运行
复制
Exception in thread "main" java.lang.NullPointerException
    at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:290)
    at java.util.ComparableTimSort.sort(ComparableTimSort.java:157)
    at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
    at java.util.Arrays.sort(Arrays.java:472)
    at datastructures.CircularBuffer.getMedian(CircularBuffer.java:98)
    at test.CircularBufferTests.test4(CircularBufferTests.java:67)
    at test.CircularBufferTests.main(CircularBufferTests.java:13)

下面是我的代码:

代码语言:javascript
代码运行次数:0
运行
复制
public class CircularBuffer<T extends Number> {

private T[] array;

public CircularBuffer(int n){
        array = (T[])new Number[n];
    }

public double getMedian(int size){


        ...
            Arrays.sort(array);
        ...

    }
}

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2014-09-19 01:04:28

显然,这里没有足够的代码来理解,但是对于将T传递到的ComparableTimSort (异常实际上来自的地方)类,并不是所有传递的T类型(Number类)都实现了可比较接口,以检查这是否是您的问题尝试用可比较的强制转换传递给您T

票数 1
EN

Stack Overflow用户

发布于 2014-09-19 01:05:34

您必须编写自定义比较器才能使用Arrays.sort()进行排序。

代码语言:javascript
代码运行次数:0
运行
复制
Arrays.sort(array, yourComparator);
票数 1
EN

Stack Overflow用户

发布于 2014-09-19 02:30:32

你可以做到

vhax建议的

  1. 。更确切地说

Arrays.sort(数组,新的比较器{ @Override public int compare(T arg0,T arg1) { ... } });

  • What crazyPixel建议,更具体

公共类CircularBuffer

这样,您就可以更具体地限制T。这被称为“多边界”http://docs.oracle.com/javase/tutorial/java/generics/bounded.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25918281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档