Habituellement, les accesseurs en écriture aux propriétés d'un JavaBean sont implémentés à l'aide d'une simple affectation. Lorsque le propriété est un Objet, on a donc à envisager le cas d'une valeur nulle. Cela peut avoir son utilité, mais quand la propriété est une collection de sous-objet, la valeur nulle est généralement plus une gêne qu'un choix de conception : avant tout traitement sur les élément de la liste ou ses propriété, il faut tester qu'elle n'est pas nulle, alors que d'un point de vue fonctionnel cette nullité n'a aucun sens : ce qui a du sens, c'est le contenu de la liste -ou le fait que la liste soit vide-.

Dans ce cas, il faut que les accesseurs de la propriété soit implémenté de telle sorte que la non nullité soit garantie.

Deux approches sont possible : soit la classe est responsable de la gestion de la collection, et c'est l'accesseur en écriture qui devra remplacer le contenu de la collection interne par celui de la collection fournie.

Soit on veut une simple garantie de non nullité, car ce sont les traitements qui veulent changer la collection qui ont la responsabilité du choix de l'implémentation et de la construction de la nouvelle collection.

Licence d'utilisation

Ce code est diffusé selon les termes de la licence GNU GPL dans sa version 3

Garantir la non nullité

import java.util.HashSet;
import java.util.Set;

/**Démonstration d'une propriété de type Collection.
 * Ici, la classe s'assure simplement que la propriété retournée est non nulle.
 *
 * (c)David SPORN
 * Ce code est diffusé selon les terme de la licence GPL version 3.
 */
public class DemoClass
{
	private Set myDatas = new HashSet() ;
		
	public Set getDatas()
	{
		if (null == myDatas)
		{
			myDatas = new HashSet() ;
		}
		return myDatas;
	}

	public void setDatas(Set datas)
	{
		myDatas = datas ;
	}
}

Gérer la collection

import java.util.HashSet;
import java.util.Set;

/**Démonstration d'une propriété de type Collection.
 * Ici, la classe est en charge de la gestion de la collection interne.
 *
 * (c)David SPORN
 * Ce code est diffusé selon les terme de la licence GPL version 3.
 */
public class DemoClass
{
	private Set myDatas = new HashSet() ;
		
	public Set getDatas()
	{
		return myDatas;
	}

	public void setDatas(Set datas)
	{
		if (null == datas)
		{
			myDatas.clear() ;
		}
		else
		{
			if (datas != myDatas )
			{
				myDatas.clear() ;
				myDatas.addAll(datas) ;
			}
		}
	}
}