Мы используем Groovy и Guice на проекте, и я наткнулся на следующую ошибку:Почему закрытие Groovy не имеет доступа к введенному члену класса?
groovy.lang.MissingPropertyException: No such property: myService for class: com.me.api.services.SomeService$$EnhancerByGuice$$536bdaec
Потребовалось немного, чтобы выяснить, но это потому, что я ссылки членом частного класса, который был введен, внутри замыкания. Может ли кто-нибудь пролить свет на то, почему это происходит?
Кроме того, есть ли лучший способ сделать это?
Вот фрагмент того, что класс выглядит следующим образом:
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class MyService extends BaseService<Thing> {
@Inject
private ThingDao thingDao
@Inject
private OtherService<Thing> otherService
@Override
List<Thing> findAll() {
List<Thing> things = this.dao.findAll()
things.each {
//Note: This doesn't work!
otherService.doSomething()
}
things
}
я либо должен использовать стандартный цикл или не использовать впрыскивается элемент, который затем стремится привести к дублированию кода.
Ничего общего с Guice. Поле 'private', поэтому Groovy не создает для него аксессор. –
В простом Groovy поля частного класса доступны из закрытий. Но имейте в виду, что частное поле вводится в экземпляр * class *, а не закрывается. Стратегия разрешения/делегирования закрытия вступает в игру, и что-то нужно искать в закрытии. Попробуйте опубликовать пример, который продемонстрировал вашу проблему более тщательно. –