Groovy 1.7 меняет "финал"? - PullRequest
4 голосов
/ 28 мая 2010

Только начал изучать Groovy, получил книгу PragProg "Программирование Groovy" и столкнулся с проблемой при компиляции одного из примеров скриптов:

class GCar2 {
  final miles = 0

  def getMiles() {
    println "getMiles called"
    miles
  }

  def drive(dist) {
    if (dist > 0) {
      miles += dist
    }
  }
}

def car = new GCar2()

println "Miles: $car.miles"
println 'Driving'
car.drive(10)
println "Miles: $car.miles"

try {
  print 'Can I see the miles? '
  car.miles = 12
} catch (groovy.lang.ReadOnlyPropertyException ex) {
  println ex.message

GroovyCar2.groovy: 20: cannnot access final field or property outside of constructor.
 @ line 20, column 35.
     def drive(dist) { if (dist > 0) miles += dist }
                                     ^

Groovy версии до 1.7 не выдают ошибку. Я просмотрел любую документацию, которую смог найти, и не увидел обсуждаемой проблемы. Что здесь происходит?

Aaron

Ответы [ 2 ]

5 голосов
/ 28 мая 2010

Нельзя назначать конечную переменную обычным методом. Это была ошибка в groovy , исправленная в 1.7.

5 голосов
/ 28 мая 2010

Я мало что знаю о Groovy 1.7, но в предыдущих версиях это похоже на ошибку, которая теперь исправлена ​​- если переменная является конечной, вы не сможете назначить ее вне конструктора (или ее декларация). Если вы можете, какой смысл делать это окончательным?

Я сомневаюсь, что это остановит вас от чтения за пределами конструктора, хотя ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...