Java/Groovy回调方法及其作用域(继承)

Java/Groovy回调方法及其作用域(继承),java,groovy,callback,Java,Groovy,Callback,假设以下代码是从groovy类中的方法截取的,该方法使用回调: Service.groovy: class Service { final Logger logger } class QueryService extends Service { def someMethod() { Logger l = logger future.register(new SingleResultCallback<ArrayList<Documen

假设以下代码是从groovy类中的方法截取的,该方法使用回调:

Service.groovy:

class Service {
    final Logger logger
}
class QueryService extends Service {
    def someMethod() { 
        Logger l = logger
        future.register(new SingleResultCallback<ArrayList<Document>>() {
            @Override
            void onResult(ArrayList<Document> result, MongoException e) {
                l.info('result: ' + result)      // works
                logger.info('result: ' + result) // fails
            }
        })
    }
}
QueryService.groovy:

class Service {
    final Logger logger
}
class QueryService extends Service {
    def someMethod() { 
        Logger l = logger
        future.register(new SingleResultCallback<ArrayList<Document>>() {
            @Override
            void onResult(ArrayList<Document> result, MongoException e) {
                l.info('result: ' + result)      // works
                logger.info('result: ' + result) // fails
            }
        })
    }
}
class QueryService扩展了服务{
def someMethod(){
记录器l=记录器
注册(新的SingleResultCallback(){
@凌驾
void onResult(ArrayList结果,MongoException e){
l、 info('result:'+result)//有效
logger.info('result:'+result)//失败
}
})
}
}
我想知道两件事:

  • 为什么可以将记录器变量分配给局部变量 并从回调中访问它?为什么我不能访问最终实例变量?回调方法丢失了吗 类的引用,但仍具有来自的方法范围 它是从哪来的?内部情况如何
  • 有没有一种方法仍然可以访问实例变量,而不必在每次使用回调之前分配它

以防有人怀疑groovy中的java引用。这是因为使用了即将推出的mongodb java驱动程序。

基本上是这样,但groovy不要求变量是final,匿名内部类应该能够访问实例变量,我更新了问题,使其更具体。其次,我注意到这只会在涉及继承的情况下导致错误。我也更新了