Java:私有(private)内部类返回给外部代码

标签 java list private internal

我最近刚刚开始学习 Java,之前有 C# 背景。

当我开始使用 Collections 时,我注意到 Arrays.asList() 返回 ArrayList<T>对象。

但是,我不明白的是,根据“docjar”处的代码 list '(第 2834 行)标签 ArrayList<T>作为私有(private)

如何使用已明确标记为对我隐藏的对象?或者(这就是我怀疑的),private 是否与我假设的含义有某种不同的含义?

(另外,我注意到该类被标记为静态,这也让我感到困惑,但我会在一个单独的问题中提出这个问题)

<小时/>

编辑:引发编译器错误的 C# 示例:

public class PubClass {
        private class Blah {

        }

        public Blah GetBlah() {
            return new Blah();
        }
}

给出:可访问性不一致:返回类型“Namespace.PubClass.Blah”的可访问性低于方法“Namespace.PubClass.GetBlah()”

最佳答案

返回给您的ArrayList实现了List以及该接口(interface)中包含的所有方法。由于 List 是公共(public)的,因此您了解这些方法并可以调用它们。

ArrayList 之所以是私有(private)的,是因为它没有理由公开:除了 List 接口(interface)提供的功能之外,它不提供任何其他功能.

/编辑
您的示例并未模仿此处发生的情况:

public interface List<T> {
    /** snip */
}

public class Arrays {
    private static class ArrayList<T> implements List<T> {
        /** snip */
    }

    public <T> List<T> asList(T... arr) {
        return new ArrayList<>(arr);
    }
}

在您的示例中,您试图返回外部调用者不知道的私有(private)类的实例。在Arrays示例中,返回的对象实际上是List(看一下返回类型),而不是私有(private)ArrayList

关于Java:私有(private)内部类返回给外部代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10973108/

相关文章:

java - 向 JFrame 添加更多组件

java - Spring @Value 无法解析字符串值中的占位符

python - 根据以一组子字符串中的一个结尾对 Python 列表进行切片

javascript - js动态访问私有(private)字段(属性/成员)

java - 这个私有(private)变量如何访问?

java - 我们如何使用 Java 接口(interface)强制执行双向接口(interface)?

java - Guice/Morphia,辅助注入(inject)错误

java - 使用 documentFilter 过滤掉制表符

.net - 将 XML 中的 <ArrayOf> 反序列化为 List<>

java - 检查 java List<object> 对象类型