Java和Android中的包范围访问
我注意到Java和Android中包作用域的奇怪行为Java和Android中的包范围访问,java,android,Java,Android,我注意到Java和Android中包作用域的奇怪行为 我已经在我的项目中创建了包“java.util.concurrent” 接下来,我在刚刚创建的包中添加了类TestClass package java.util.concurrent; public class TestClass { public void testMethod() { ArrayBlockingQueue s = new ArrayBlockingQueue(1); // I can
package java.util.concurrent;
public class TestClass {
public void testMethod() {
ArrayBlockingQueue s = new ArrayBlockingQueue(1);
// I can use items field.
Object[] items = s.items;
}
}
public class ArrayBlockingQueue<E> extends AbstractQueue<E>
implements BlockingQueue<E>, java.io.Serializable {
....
/** The queued items */
final Object[] items;
....
}
公共类ArrayBlockingQueue扩展了AbstractQueue
实现BlockingQueue,java.io.Serializable{
....
/**排队的项目*/
最终目标[]项;
....
}
看起来,
ArrayBlockingQueue
的Android版本与Java版本不同。在Android中,项
是。这就解释了为什么它超出了范围。您可以解决这个问题,通过反射您可以(不确定最终版私有版)从哪里访问它?在这两种情况下都来自同一个软件包?安卓的哪个版本?我添加了屏幕。版本API是凯文的权利。例如:openjdk将项定义为:private final E[]项哇,真不敢相信我犯了那个错误(那是openjdk而不是android源代码)。感谢您的更正,我添加了一个屏幕,显示Android版本和带有软件包范围的项目字段。我找不到一个很好的解释。我同意,它应该是有效的。可能是安卓巫术在起作用,导致你的类实际上不在同一个包中。@Kevin Yep,我同意你的看法,我在安卓中发现了其他具有相同行为的类,这很奇怪。