P
'
t
i
t
e
C
h
a
t
t
e
 
spacer~ LATORTUE + (462*RICO)² = NOP Articles | Connexion
 
~GRAIN DE SEL

 Local classes
04/04/2008 - 08:25

J'ai cette semaine découvert une propriété assez surprenante du langage Java, disponible à partir de la version 1.5 1.1 (!) du JDK. Les local classes sont des classes similaires aux classes internes ou anonymes mais peuvent être déclarées dans un constructeur ou une méthode. J'explique avec un exemple :

public void printPairs() {
  class Pair {
    int first;
    boolean second;

    public Pair(int first, boolean second) {
      this.first = first;
      this.second = second;
    }
  }

  Pair pair;
  for  (int i = 0; i < 64; i++) {
    pair = new Pair(i, (i & 0x1) == 0x1);
    System.out.printf("%d est impaire ? %b\n", pair.first, pair.second);
  }
}

Et ça marche ! Je n'ai pas encore cherché à comprendre l'intérêt de cette fonctionnalité mais j'imagine qu'elle a été introduite pour l'implémentation des enums.



 Romain GUY (Gfx)

 vendredi 04 avril 2008 @ 09:38
  
Salut Romain ;)


Tu es sûr de toi sur ce coup là ?
Je n'ai pas de compilateur 1.4 sous la main mais ce code fonctionne parfaitement en compilant avec un -source 1.4 (après remplacement du printf() par un println() bien sûr).

De plus ces "local classes" ne sont ni plus ni moins qu'une variante des classes anonymes... mais avec un nom !

a
adiGuba 
Gravatar Image
 vendredi 04 avril 2008 @ 09:47
  
Je n'ai pas vérifé sur un 1.4 mais les API de reflection pour découvrir si une classe est locale sont apparues dans 1.5. Cela dit, c'est peut-être comme les generics, qui étaient cachés depuis un bon moment dans le compilateur :) Tu peux en effet voir les local classes comme un simple variante si tu veux... mais à ce moment là les classes internes sont également une simple variante des classes anonymes (sauf quand elles sont statiques). Quoi qu'il en soit, l'API de reflection les distingue très clairement.
Gfx 
Gravatar Image
 vendredi 04 avril 2008 @ 09:51
  
Wow, renseignements pris, les local classes datent de Java 1.1. Et je viens de me rappeler que je les ai déjà vues utilisées pour implémenter les itérateurs dans les collections.
Gfx 
Gravatar Image
 vendredi 04 avril 2008 @ 09:52
  
Ok je pencherais plus pour une évolution de l'API de réflection alors !

D'ailleurs je viens de jeter un coup d'oeil à la javadoc et on y voit aussi une méthode isAnonymousClass() apparut avec la 1.5. Pourtant les classes anonymes existaient bien avant (et ça j'en suis sûr ;)).

a
adiGuba 
Gravatar Image
 vendredi 04 avril 2008 @ 09:53
  
on a posté en même temps ;)
adiGuba 
Gravatar Image
 vendredi 04 avril 2008 @ 17:32
  
isn't this normal when you think you create local (anonymous) classes all the time when implementing listeners..? :)
mxttie 
Gravatar Image
 vendredi 04 avril 2008 @ 18:34
  
Anonymous classes could very well exist without local classes. An anonymous class is different since you declare it and instanciate it at the same time and you cannot reference it afterwards.
Gfx 
Gravatar Image
 dimanche 06 avril 2008 @ 20:06
  
haaan, Gfx qui ne savait pas ça, un pan du mythe s'effondre ...

en même temps, on peut dire que peu de choses lui échappent et que les rares inconnues du langage java ne vont pas le lui rester longtemps ...

bon moi je ne connais pas java, alors dis moi ce qui différencie cette classe local (ce qui pour moi indique la portée de la classe) et une classe interne (qui est une classe dans une classe ?)?


...
Loone 
Gravatar Image

 Ajoutez votre grain de sel 
 
Surnom :
E-mail :
Message :     B     I     U     CODE     QUOTE     IMAGE     CD CASE     LINK 
 
Un gâteau ?oui    non 
RisoliVillard ?oui    non 
Port de RisoliVillard :
     


 Aide
RisoliVillard est un plugin Winamp 2/5, iTunes et un outil pour XMMS qui vous permettra d'afficher la chanson que vous écoutez au moment de l'écriture de votre réponse. Le port utilisé par votre plugin doit être reproduit dans le champ ci-dessus (8462 par défaut).
Utilisation de vBCode :
- [B]gras[/B]
- [I]italique[/I]
- [U]souligné[/U]
- [QUOTE]citation[/QUOTE]
- [CODE]code[/CODE]
- [IMG]http://www.serveur.com/image.jpg[/IMG]
- [URL=http://www.serveur.com/]texte à afficher[/URL]

 
#ProgX©2005 Mathieu GINOD - Romain GUY - Erik LOUISE