【问题标题】:How can I get some value in inner class in java?如何在 java 的内部类中获得一些价值?
【发布时间】:2015-02-24 02:22:57
【问题描述】:

我想返回一些值取决于内部类中的一些值:

public boolean rename(File file) {
    new OnResultListener() {
        @Override
        public void onResult(AsyncResult<CharSequence> result) {
            // some codes

            // Here is what I want to do
            if (succeed) {
                // rename return true
            } else {
                // rename return false
            }
        }
    }
}

【问题讨论】:

  • 返回哪里给谁/什么
  • 你的内部类的方法永远不会被调用。所以如果这是可能的,rename 不会返回任何东西?
  • @immibis 这是android中的异步结果,我在我的问题中删除了很多代码
  • @roger 所以你想启动一个 AsyncTask,然后等到它完成?这是没有意义的。
  • @Sotirios Delimanolis 我在代码中调用rename,如果返回true,我会刷新,如果返回false,我会做一些错误处理

标签: java inner-classes


【解决方案1】:

你不能,这没有意义。这是两个不同的函数,可以很好地在不同的线程上调用。如果你坚持要返回一些东西,你必须做的是,“重命名”函数本身应该接收一个回调作为成功调用的参数。也就是说,如果下游调用是异步的,那么调用它的也应该是异步的。

【讨论】:

    【解决方案2】:

    另一种方法是让调用函数(在本例中为“rename”,假设它调用通知 OnResultListener 的函数)来等待某个互斥体。然后,在收到结果的嵌套方法中,您设置一些标志,然后调用 notify() 这将唤醒等待所持有的线程。

    【讨论】:

    • 这是解决问题的两种不同方法。
    • 在你的另一个答案中,你说你不能,它没有意义。是哪一个?
    • 你肯定不能按照你描述的方式。我给了你两种替代方法。
    猜你喜欢
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 2014-01-17
    • 2015-09-19
    • 2020-11-03
    • 1970-01-01
    • 2018-03-01
    • 2018-03-21
    相关资源
    最近更新 更多