当前位置: 首页 > 知识库问答 >
问题:

为什么java.util.ArrayList包中的数据数组是私有的?

侯英达
2023-03-14

java.util.ArrayList类中,列表元素的对象数组定义为Package-Private:

transient Object[] elementData; // non-private to simplify nested class access

注释指出,该字段不是私有字段的原因是在嵌套的类中更容易访问。然而,嵌套的类可以很好地访问封闭类的私有数据。那么为什么elementdata不是私有的呢?在后台是否发生了一些事情(例如,在编译时)?

共有1个答案

方野
2023-03-14

当从嵌套类访问私有字段时,编译器实际上会生成一个包可见的合成访问器方法,然后使用该方法进行访问。它不能直接访问私有成员,因此为了避免这种间接访问,您可以使成员包可见。

这里有一个更详细的答案。

 类似资料:
  • 本文向大家介绍程序计数器为什么是私有的?相关面试题,主要包含被问及程序计数器为什么是私有的?时的应答技巧和注意事项,需要的朋友参考一下 程序计数器主要有下面两个作用: 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。 在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。 需要注意

  • 问题内容: 由于枚举构造函数只能由其常量调用,因此为什么要允许它成为包私有的? 问题答案: 构造函数实际上不是包私有的…隐式地意味着接口方法是隐式的,即使您不添加关键字也是如此。 JLS(第8.8.3节)的相关部分规定: 如果没有为普通类的构造函数指定访问修饰符,则该构造函数具有默认访问权限。 如果没有为枚举类型的构造函数指定访问修饰符,则构造函数为。 如果枚举类型(第8.9节)的构造函数声明为或

  • 问题内容: 我了解Go中数组和切片之间的区别。但是我不明白的是为什么完全拥有数组会有所帮助。数组类型定义指定长度和元素类型为什么有帮助?为什么我们使用的每个“数组”都不能切片? 问题答案: 数组不仅仅是固定长度,还有更多:它们是 可比较的 ,并且它们是 值 (不是引用或指针类型)。 在某些情况下,数组比切片有无数的优势,所有这些优点加在一起证明了数组的存在(以及切片)。让我们看看他们。(我什至不算

  • 问题内容: 我正在尝试检查数组数组是否包含字符串数组。我的错误消息说: “无法为’contains’找到重载,该重载接受类型为’([([[((String)])]),[(String)])类型的参数列表 这是怎么回事!? 问题答案: 不符合协议,因此 不能在这里使用。您可以使用基于谓词的变体 代替: 因为是为元素数组定义的。

  • 根据Stevens(图示为TCP/IP),traceroute程序用增量TTL(1、2、3等)向目的主机发送UDP数据包,以从ICMP TTL过期消息中获取中间跳信息。 “到达目的地”条件是ICMP端口无法到达的消息,因为traceroute寻址的随机端口数量很高(也就是说,不太可能有人在那里监听) 所以我的问题是:是否有技术原因(缺点、RFCs等)使用UDP数据包而不使用例如ICMP回送请求消息

  • 问题内容: ArrayList仅接受引用类型作为其元素,而不接受原始数据类型。尝试这样做时会产生编译时错误。 这背后的概念是什么?似乎是一个限制,不是吗? 问题答案: Java的所有收集类都存储它们收集的对象的内存位置。基本值不 适合 同一定义。 为避免此问题,JDK5及更高版本具有 自动装箱功能 -其中,将原语转换为适当的对象,然后在添加或从集合中读取原语时将其转换回原样。请参阅有关此主题的官方