su uso en clase maravilloso otro campo de instancia

Serban César;

Estoy tratando de construir una clase maravillosa con propiedades y tienen una propiedad dependen uno del otro. Pero siempre me parece para obtener un valor nulo o por defecto. He intentado utilizar el 'esto' palabra clave pero estoy perdiendo algo fundamental. Sé que probablemente tiene algo que ver con las variables de instancia.

Decir que tengo la siguiente:

class BaseClass {
    String jobName
    String jobDescription = jobName + '-description'
}

Si una instancia de la clase y declaro ambos atributos, todo funciona:

new BaseClass().with {
        jobName = 'test-job'
        jobDescription = 'Sample description'
    }

Pero si sólo una instancia de la propiedad NOMBRE DEL TRABAJO, la descripción utiliza nula. Por lo que será 'nulo descripción'.

¿Hay alguna manera de crear una instancia de un objeto y utilizar la propiedad JobName así que don tiene que repetir las cosas para cada objeto crear?

cfrick:

Creo que es el mejor de la anulando el colocador para jobNamea continuación, establecer la descripción defensiva. P.ej

class BaseClass {

    String jobName

    String jobDescription

    void setJobName(String jobName) {
        this.jobName = jobName
        if (!jobDescription) {
            jobDescription = "${jobName}-description"
        }
    }
}

assert new BaseClass().tap{ jobName = 'test-job' }.jobDescription == 'test-job-description'

La razón por la que su intento no funciona como se espera se debe al flujo de las cosas que suceden - el valor por defecto del atributo se realiza en tiempo de construcción del objeto. Por lo que establecer el trabajo más tarde (dentro del with) no tiene ningún efecto (no se puede calcular de nuevo desde la nueva entrada).

Otra opción sería un enfoque basado constructor (por ejemplo, uso final y tratar este problema en el c'tor para crear una descripción por defecto)

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=292921&siteId=1
Recomendado
Clasificación