我注意到 Java 和 Android 中包作用域的奇怪行为。
- 我已经在我的项目中创建了“java.util.concurrent”包
接下来我在刚刚创建的包中添加类 TestClass
package java.util.concurrent; public class TestClass { public void testMethod() { ArrayBlockingQueue s = new ArrayBlockingQueue(1); // I can use items field. Object[] items = s.items; } }
ArrayBlockingQueue 类的字段项具有最终包范围
public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable { .... /** The queued items */ final Object[] items; .... }
接下来,当我尝试使用通常的 Java 项目 (java 1.8.6x) 编译 TestClass 时。我获得了成功,这是合乎逻辑的。
但 Android 项目中的同一个类返回编译时错误。原因是“我的类(class)无法访问该字段”。
你有什么想法吗?
更新
下面的屏幕显示了Android的版本和Queue类的代码
最佳答案
Android 版本的ArrayBlockingQueue
似乎与Java 版本不一样。在 Android 中,items
是 actually private .这对于为什么它超出范围是有道理的。你可以解决这个问题,通过反射(reflection)你可以 gain access to private variables (不确定最终私有(private))
关于java - Java 和 Android 中的包范围访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33939855/