【问题标题】:Java "null" value never assigned to my RunnableJava“null”值从未分配给我的 Runnable
【发布时间】:2016-05-13 06:36:51
【问题描述】:

所以我有这个代码:

    for(Runnable loadTask : mMeshLoadMap.values())
    {
        if(loadTask != null)
        {
            loadTask.run();
            loadTask = null;
        }
    }

我的问题是永远不会执行loadTask = null 语句,Android Studio 说“从未使用过分配给 loadTask 的值“null””...

另外,当我在该行设置断点时,调试器永远不会到达它。 它可以到达loadTask.run(),但不能到达loadTask = null 而且我确信loadTask.run() 不会阻塞太久

【问题讨论】:

  • 不,我想要同步执行,我不想为我的可运行对象启动线程
  • 那你为什么要使用 Runnable 接口呢? “Runnable 接口应该由其实例打算由线程执行的任何类实现。”
  • 我认为编译器实际上可能会删除 loadTask = null; 语句,因为它根本不做任何事情。我不确定 JLS 是否允许这样做,但某些语言允许编译器执行几乎任何操作,只要程序的可观察效果不变。由于带有断点的行不会以任何方式影响可观察到的效果,我不明白为什么编译器不应该删除它。
  • @DavidS 我使用 Runnable 作为“函数”对象。 Runnable 不仅可以用于线程,还可以用于任何事情。
  • 好吧,我不知道这是否合适,但我知道即使是 Android API 也使用 runnables 来对同步事件进行排队,例如:developer.android.com/reference/android/opengl/…(我实际上从那里得到了这个想法!)

标签: java null runnable


【解决方案1】:

当然可以赋值,但是没有意义。您只会将名为 loadTask 的引用归零(超出块外的范围)。您无法更新数组中的引用。 The For-Each Loop 说(部分)

for-each 循环隐藏了迭代器,因此您不能调用 remove。因此,for-each 循环不可用于过滤。同样,它不适用于在遍历时需要替换列表或数组中的元素的循环。

【讨论】:

    猜你喜欢
    • 2022-12-12
    • 2016-06-01
    • 2016-11-02
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多