我最近刚刚开始学习 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/