java - Java 和 Android 中的包范围访问

标签 java android

我注意到 Java 和 Android 中包作用域的奇怪行为。

  1. 我已经在我的项目中创建了“java.util.concurrent”包
  2. 接下来我在刚刚创建的包中添加类 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;
    
       }
    
    }
    
  3. 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类的代码

enter image description here

最佳答案

Android 版本的ArrayBlockingQueue 似乎与Java 版本不一样。在 Android 中,itemsactually private .这对于为什么它超出范围是有道理的。你可以解决这个问题,通过反射(reflection)你可以 gain access to private variables (不确定最终私有(private))

关于java - Java 和 Android 中的包范围访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33939855/

相关文章:

java - Android CAB 在项目被删除时强制溢出菜单

android - 如何在 Android 的 QuickAction 对话框中添加 Listview

android - 设备重启后如何注册地理围栏?

java - 在Windows启动时执行Jar不起作用,没有结果

java - Android 中的 PNG ImageData 转位图

java - 在 Swing 中操作 JPanel

java - 将BaseGameUtils添加到libgdx项目时出现问题

android - 如何删除getExternalFilesDir(null)android中的内容

java - 错误:任务':app:compileDebugJavaWithJavac'的执行失败。 >扩展RealmObject类后,编译失败

java - Azure java函数无法扩展以处理繁重的eventhub消息?