通用静态数组声明

时间:2014-11-15 07:12:05

标签: 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) {
        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

我面临以下声明的问题 - 说不能引用非静态类型变量 来自静态背景。

“private static E [] array,aux;”

你能告诉我我失踪的地方吗?

此致 PRATIK

2 个答案:

答案 0 :(得分:1)

你想要做的事情根本无法完成。没有通用的静态成员。

通常你会将这些数组传递给其他方法。

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
) {
    ...
}

保持这个辅助数据为静态成员无论如何都不是一个好主意,因为这意味着你的方法不能同时调用。

答案 1 :(得分:1)

首先,你需要研究静态修饰符是什么,因为它是你要求的错误的来源。 https://stackoverflow.com/a/413904/3657704

我不明白为什么你会在你的代码中到处使用静态修饰符,当然在更高级的谈话中我会说你试图在一个名为&#34的类中完成具有大量静态字段和方法的东西; ThreadedSorter& #34 ;.

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

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