----- Original Message -----
From: "Nicolas Delsaux" <[EMAIL PROTECTED]>
To: "Laurent For�t" <[EMAIL PROTECTED]>
Sent: Monday, December 09, 2002 12:00 PM
Subject: Re: Class static VS singleton

> Le m�thodes statiques ne fournissent pas d'h�ritage. La cons�quence
imm�diate est qu'il n'est pas possible de red�finir leur comportement, ou
m�me de le sp�cialiser, dans le cas o� une impl�mentation plus sp�cialis�e
(par exemple XML ou DB) peut �tre n�cessaire.
>
Pas compl�tement il est possible d'�tendre ce genre de classe et on peut
red�finir leur comportement :

public class ClassUsingStatic {
  public static void staticMethod() {
    System.out.println("In ClassUsingStatic.staticMethod()");
  }
}
public class OtherClassUsingStatic extends ClassUsingStatic {
 public static void staticMethod() {
     System.out.println("In OtherClassUsingStatic.staticMethod()");
  }
}

Est possible. Par contre, il est vrai que l'on ne peut pas h�riter du
comportement de la classe m�re :

public class ClassUsingStatic {
  public static void staticMethod() {
    System.out.println("In ClassUsingStatic.staticMethod()");
  }
}
public class OtherClassUsingStatic extends ClassUsingStatic {
 public static void staticMethod() {
    super.staticMethod();
    System.out.println("In OtherClassUsingStatic.staticMethod()");
  }
}

On a effectivement, une erreur de compilation :
OtherClassUsingStatic.java [4:1] non-static variable super cannot be
referenced from a static context
    super.staticMethod();
    ^
1 error


> Par cons�quent, j'ai d�cid�, de mani�re unilat�rale, que je n'utilise des
m�thodes statiques que dans les cas suivants :
>  - si la m�thode est purement proc�durale, et ne n�cessite *strictement*
aucune donn�e de classe.
>  - pour r�cup�rer une instance d'un singleton.
> Et c'est tout. Dans tous les autres cas, je pr�f�re m'interdire l'usage de
m�thodes statiques, qui sont une �pine dans le pied de la bonne
programmation Java, puisqu'elles imposent de consid�rer leur classe de
d�finition comme le seul emplacement possible pour ce code.
> Et au final, je trouve le r�sultat tr�s propre : lorsqu'il s'agit d'une
m�thode purement utilitaire, elle est statique, et d�s qu'elle se met �
stocker des donn�es, je garde le prototype (tout en le d�clarant deprecated)
et je passe l'appel � un singleton.
>
Je respectais le m�me genre de r�gle, mais sans raison apparente.

Merci, pour ces �claircissements.
Laurent For�t.
>
> --
> Nicolas Delsaux
> Devise shadock : Pour une oreille bien exerc�e, il n'y a pas de bruit qui
ne puisse �tre entendu comme une musique. Et r�ciproquement.
>
>
>

Répondre à