¿Debo poder modificar esta propiedad final? Los libros dicen que debería, pero me sale un error.

Groovy noob aquí, estoy trabajando en mi primer libro de Groovy y tiene un código de ejemplo donde dice aproximadamente

"Si quiero que una propiedad esté lista para ser utilizada, declare que es definitiva. Esto no define un campo final sino una propiedad de solo lectura. Puede cambiar la propiedad desde la instancia. Métodos de la clase definitoria, pero no de fuera "

Aquí está el código que tengo en cuestión, pero sigo recibiendo un mensaje de error:

no puede modificar el campo final 'millas' fuera del constructor.

Código:

class Car
{
    final miles = 0

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

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

}

El libro dice que debería poder modificar millas desde el método de instancia drive , ¿estoy haciendo algo mal?

3
Estoy trabajando en el mismo libro, escribí el mismo código y recibí este problema, ¡gracias por publicar!
agregado el autor ericraio, fuente

1 Respuestas

Creo que lo que querían decir (no estoy seguro de lo que dijeron, si es parafrasear) es que no hay un método definidor definido, por lo que no se puede modificar desde fuera de la clase.

Sin embargo, es , sigue siendo una propiedad de final , lo que significa que no se puede modificar una vez que se haya establecido, lo que estaría en un constructor o durante la declaración.

Reglas de propiedad y de campo

Dicho esto, vea estos dos problemas: 1628 , 2752 , por lo que puede ser necesaria más exploración, aunque esto parece estar limitado a las propiedades del script local.

My guess is you're using a 1.7+ Groovy, while the book targets <= 1.6.

Consulte también esta pregunta de SO .

2
agregado
¿Puedo declarar algo como: def final miles ?
agregado el autor ProfessionalAmateur, fuente
Esa pregunta a la que hace referencia habla sobre el mismo libro y el capítulo en el que estoy. Parece que el libro fue escrito para <1.6 y estoy usando 1.8 para jugar.
agregado el autor ProfessionalAmateur, fuente
@ProfessionalAmateur Yep; Lo arreglaron (¡aunque tomó un año o dos!)
agregado el autor Dave Newton, fuente