【问题标题】:error: swap(Object[],int,int) has private access in Collections错误:swap(Object[],int,int) 在 Collections 中具有私有访问权限
【发布时间】:2016-06-20 23:15:14
【问题描述】:

我正在学习 Java 并编写 QuickSort 类。在某些时候需要交换数组中的元素,所以我尝试使用Collections.swap 来做这件事,例如in this question。但是,javac QuickSort.java 向我抛出了一个错误:

error: swap(Object[],int,int) has private access in Collections

我在这里做错了什么? QuickSort.java的完整代码:

package src.sort;

import java.util.Collections;

public class QuickSort {
    public static void sort(Comparable[] xs) {
        sort(xs, 0, xs.length);
    }

    private static boolean less(Comparable x, Comparable y) {
        return x.compareTo(y) < 0;
    }

    private static void sort(Comparable[] xs, int fst, int lst) {
        if (fst >= lst) return;

        int i = fst, j = lst;

        Comparable pivot = xs[(i + j) / 2];

        while (i <= j) {
            while (less(xs[i++], pivot));
            while (less(pivot, xs[j--]));

            if (i <= j) Collections.swap(xs, i++, j--);
        }

        sort(xs, fst, j);
        sort(xs, i, lst);
    }
}

【问题讨论】:

    标签: java collections compiler-errors


    【解决方案1】:

    错误非常明显。您不能调用该方法,因为它是私有方法,只能通过 Collections 类中的代码访问。编写自己的方法很容易,它与这个简单的方法具有相同的功能。

    链接问题中推荐的交换方法是交换列表的两个元素的公共方法 - public static void swap(List&lt;?&gt; list, int i, int j)。您尝试调用的方法是一个不同的方法,它交换数组的两个元素,它是私有的 - private static void swap(Object[] arr, int i, int j)

    【讨论】:

    • 怎么会用到the question I linked
    • @all3fox swap(List&lt;?&gt; list, int i, int j); 是公开的,而swap(Object[] arr, int i, int j) 是私有的。
    猜你喜欢
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2012-04-07
    • 2018-11-29
    相关资源
    最近更新 更多