JavaFX: criar propriedades de forma mais eficiente

As capacidades avançadas de propriedades JavaFX não vêm sem um custo. Especificamente, instanciar um objeto de propriedade tem mais memória e tempo de processamento do que a criação de uma propriedade com base em campo simples. E em muitas classes, as capacidades avançadas de um objecto imóvel JavaFX são apenas ocasionalmente necessário. Este, instanciar objetos de propriedade para cada propriedade em uma classe se o objeto é necessária ou não, é um desperdício.

Aqui está uma técnica para a criação de propriedades em que os bens objetos em si não são instanciado até que a propriedade em si acessor é chamado. Dessa forma, o objeto de propriedade não é criado a menos que seja realmente necessário. Aqui estão os detalhes desta técnica:

  1. Declarar um campo particular para manter os dados representados pela propriedade.

    Por exemplo, para uma propriedade de cadeia, você cria um Corda variável. Para o nome da variável, use o nome da propriedade precedido por um sublinhado, como este:

    Cadeia _firstName final privado = "" -
  2. Criar, mas não instanciar, uma variável privada para representar o objeto imóvel.

    Em outras palavras, declarar a variável, mas não chama o construtor da classe:

    private final SimpleStringProperty firstName-
  3. Criar o getter.

    No getter, usar um E se declaração para determinar se o objeto existe propriedade. Se isso acontecer, retornar o valor da propriedade. Se isso não acontecer, retornar o valor do campo privado. Por exemplo:

    pública getFirstName final String () {if (firstName == null) return _firstName-elsereturn firstName.get () -}
  4. Criar o setter.

    Usar a mesma técnica na setter:

    public final vazio setFirstName (String value) {if (firstName == null) _firstName = value-elsefirstName.set (valor) -}
  5. Criar o acessor propriedade.

    Neste método, primeiro verificar se existe ou não o objeto de propriedade e criar o objeto se ele não existe. Use o valor do campo privado como o valor inicial da propriedade. Em seguida, retornar o objeto:

public final StringProperty firstNameProperty () {if (firstName == null) firstName = new SimpleStringProperty (this, "firstName", _firstName) -Retornar firstName-}

Aqui está o que parece colocados juntos em uma classe chamada Cliente:

Classe pública Cliente {String _firstName private final = "" -Privada última SimpleStringProperty firstName-públicas getFirstName final String () {if (firstName == null) return _firstName-elsereturn firstName.get () -} public setFirstName final void (String value) {if (firstName == null) _firstName = value-elsefirstName.set (valor) -} público final StringProperty firstNameProperty () {if (firstName == null) firstName = new SimpleStringProperty (this, "firstName", _firstName) -Retornar firstName -}}

menu