Editar:
Le code ci-dessous suppose que vous faites tout à la main. Dans mon exemple, le compilateur génère les méthodes simples get/set et convertit tous les accès directs aux variables en ces méthodes. Si ce n'était pas le cas, le code client devrait être recompilé, ce qui va à l'encontre d'une grande partie du but recherché.
Original :
Le principal argument en faveur des propriétés est qu'elles suppriment la nécessité de recompiler votre code si vous passez d'une variable à une méthode.
Par exemple :
public class Foo
{
public int bar;
}
Si nous décidions par la suite de valider le "bar", nous devrions procéder de la sorte :
public class Foo
{
private int bar;
public void setBar(final int val)
{
if(val <= 0)
{
throw new IllegalArgumentException("val must be > 0, was: " + val);
}
bar = val;
}
public int getBar()
{
return (bar);
}
}
Mais ajouter la méthode set/get casserait tout le code. Si cela se faisait via les propriétés, vous pourriez ajouter la validation après coup sans casser le code client.
Personnellement, je n'aime pas cette idée - je suis beaucoup plus heureux avec l'idée d'utiliser l'annotation et d'avoir le simple set/get geterated automatiquement avec la possibilité de profiler vos propres implémentations set/get si nécessaire (mais je n'aime pas les appels de méthode cachés).