Comment créer une propriété en lecture seule dans javafx

Bien que, dans JavaFX une propriété en lecture seule a moins de fonctionnalités que la lecture / écriture des biens, il est en fait plus compliquée à mettre en œuvre. Pourquoi? Parce que en interne - au sein de la classe qui contient la propriété en lecture seule - vous devez être en mesure de lire ou d'écrire la valeur de la propriété. Mais à l'extérieur - qui est, en dehors de la classe qui définit la propriété en lecture seule - vous devez vous assurer que les utilisateurs peuvent lire mais pas écrire la valeur de la propriété.

Vous pourriez penser que l'omission de la méthode setter serait suffisant pour créer une propriété en lecture seule. Mais le problème est que, en plus de méthodes getter et setter, propriétés JavaFX exposent également une méthode d'accesseur de propriété qui offre un accès direct à l'objet de la propriété elle-même.

Ce qui suit est un exemple de la façon dont pas pour créer une propriété en lecture seule:

StringProperty prenom = new SimpleStringProperty (this, "prenom", "") -Santé finale Chaîne getFirstName () {return firstName.get () -} public final StringProperty firstNameProperty () {return firstName-}



Ce code est le même que le code utilisé pour créer une propriété de lecture / écriture, à l'exception que l'on a omis setFirstName Procédé. Malheureusement, cette définition de la propriété ne prévient pas les utilisateurs de la classe qui définit la propriété de modifier la propriété. Pour ce faire, tout l'utilisateur aurait besoin de faire est accéder à la propriété et ensuite appeler la propriété de ensemble méthode directement.

Par exemple, supposons que cette propriété fait partie d'une classe nommée Client, un exemple de ce qui est référencé par la variable Cust. Le code suivant serait de définir la valeur de la propriété en lecture seule:

. cust.getFirstName () ensemble ("Bogus Value") -

Pour créer une propriété en toute sécurité en lecture seule, vous devez en fait créer deux copies de la propriété: une version en lecture seule et une version en lecture / écriture. La lecture seule version sera exposée au monde extérieur.

La version lecture / écriture sera utilisé en interne, au sein de la classe qui définit la propriété. Ensuite, vous devez synchroniser ces deux propriétés afin que chaque fois que la valeur de la lecture interne / écrire les changements de propriété, la valeur de la propriété en lecture seule externe est automatiquement mis à jour.

Pour ce faire, JavaFX fournit deux classes supplémentaires pour chaque type de données de la propriété: une catégorie de biens lecture seule et une classe wrapper lecture seule. La classe de la propriété en lecture seule est celui que vous partagez avec le monde extérieur via la méthode propriété accesseur. La classe wrapper lecture seule est celui que vous utilisez pour créer le domaine privé utilisé pour faire référence à la propriété dans le programme.

Voici un exemple complet qui implémente une propriété entier lecture seule nommée numéro de client dans une classe nommée Client:

public class Customer {ReadOnlyIntegerWrapper customerNumber = new ReadOnlyIntegerWrapper (this, "customerNumber", 0) -Santé finale Entier getCustomerNumber () {return customerNumber.get () -} ReadOnlyIntegerProperty public final () customerNumberProperty () {return customerNumber.getReadOnlyProperty () - } // Plus de détails de la classe vont ici}

La clé pour comprendre comment cela fonctionne est de réaliser que la classe wrapper lecture seule est une extension de la classe de propriété simple qui ajoute juste une nouvelle méthode: getReadOnlyProperty, qui renvoie une copie en lecture seule de la propriété simple. Cette copie en lecture seule est automatiquement synchronisé avec la propriété simple, de sorte que chaque fois qu'une modification est apportée à la simple propriété sous-jacente, la valeur de la propriété en lecture seule sera changé ainsi.


» » » » Comment créer une propriété en lecture seule dans javafx