Java 通用静态数组声明

Java 通用静态数组声明,java,arrays,generics,static,Java,Arrays,Generics,Static,我是Java新手,在将泛型数组声明为静态数组时遇到了一个问题。我需要你的帮助 解决并理解出了什么问题 public class ThreadedSorter<E> { private static int number_of_threads = 2; private static E[] array, aux; .... public static <E> E[] mergeSort(E[] unsortarray) {

我是Java新手,在将泛型数组声明为静态数组时遇到了一个问题。我需要你的帮助 解决并理解出了什么问题

public class ThreadedSorter<E>  {

    private static int number_of_threads = 2;

    private static E[] array, aux;    

    ....

    public static <E> E[] mergeSort(E[] unsortarray) {
        array = unsortarray;
        .....
        return array;
    }

    private static void mergeSortHelper(int low, int hi) {
        if(low==hi) return;
        int mid = (low+hi) >> 1;
        mergeSortHelper(low,mid);
        mergeSortHelper(mid+1, hi);
        merge(low,mid+1,hi);
    }

    private static void merge(int low, int hi, int upperBound) {

        .....

        while(low <=mid && hi <= upperBound)
            if(array[low] <= array[hi])
                aux[j++] = array[low++];
        ........
    }


endclass
公共类线程分拣机{
线程的私有静态整数数量=2;
专用静态E[]阵列,aux;
....
公共静态E[]合并排序(E[]取消排序数组){
数组=不排序数组;
.....
返回数组;
}
专用静态无效合并选择器(整数低,整数高){
如果(低==高)返回;
int mid=(低+高)>>1;
合并选择器(低、中);
合并服务器(mid+1,hi);
合并(低、中+1、高);
}
私有静态无效合并(int低、int高、int上界){
.....

而(low您试图做的事情根本无法完成。没有通用的静态成员

因此,通常您会将这些数组传递给其他方法

public static <E> E[] mergeSort(E[] unsortarray) {
    ...
}

private static <E> void mergeSortHelper(
    E[] arr, E[] aux, int low, int hi
) {
    ...
}

private static <E> void merge(
    E[] arr, E[] aux, int low, int hi, int upperBound
) {
    ...
}
公共静态E[]合并排序(E[]取消排序数组){
...
}
专用静态无效合并器(
E[]arr,E[]辅助,内低,内高
) {
...
}
私有静态无效合并(
E[]arr,E[]aux,整数低位,整数高位,整数上界
) {
...
}

无论如何,将此帮助器数据保留为静态成员并不是一个好主意,因为这意味着无法同时调用方法。

首先,您需要研究静态修饰符是什么,因为它是您请求的错误的来源。

我不明白为什么在代码中到处都使用静态修饰符,当然,在更高级的演讲中,我会说,在一个名为“ThreadedSorter”的类中,您试图通过使用大量静态字段和方法来完成一些事情

让一个类方法调用实例变量有意义吗?它可能找不到它,因为类加载器加载静态字段和方法,即使对象的实例不存在


当然radiodef的答案也是正确的。

不要使用数组,特别是在处理泛型时。使用集合!请注意,
mergeSort
方法不应该有类型参数
-请注意,这是另一个类型参数,它对类隐藏了类型参数
E