Java 5 1 Lionel Seinturier
Java 5
Lionel Seinturier
Université des Sciences et Technologies de Lille
2/11/06
Java 5 2 Lionel Seinturier
Plan
1. Introduction
2. Auto-boxing
3. Types énumérés
4. Boucle for étendue
5. Annotations
6. Entrées/sorties formattées
7. varargs
8. Types génériques
Java 5 3 Lionel Seinturier
1. Introduction
Historique
1991 J. Gosling, B. Joy, A. Van Hoff : OAK (électronique grand public)
1993 JDK 1.0, lien avec Web (applet)
1996 Java Beans
1997 JDK 1.1, Enterprise Java Beans, JavaCard, Java OS
1998 Java 2 (JDK 1.2, 1.3, 1.4)
2004 Java 5 (JDK 1.5) : annotations, types génériques, enum, auto-boxing
En cours de développement
2006 Java 6 (beta 2) : amélioration API, intégration SGBD
2007 ? Java 7 : VM multi-langage Java, JavaScript, PHP, Python, …
Nombreuses technologies pour les applications client/serveur
JSP, servlet, JDBC, JMS, JavaIDL, JavaMail, RMI, JCE, JAAS, JNDI, JTS, JTA,
JavaCard, JMX, JMI, ......
Java 5 4 Lionel Seinturier
1. Introduction
Objectifs de Java 5
• améliorer la productivité des développeurs
• améliorer le typage des programmes
• faire en sorte que plus d'erreurs puissent être détectées par le
compilateur
• ( rattraper C# )
• sans modification du format de bytecode
¾techniques de compilateur
¾"traduction" des mécanismes vers le même jeu d'instruction (bytecode)
Java 5 5 Lionel Seinturier
2. Auto-boxing
• faire en sorte qu'il n'y ait plus de différences entre les types
primitifs et leurs équivalents objet
– int, float, double, long, short, byte, boolean
– java.lang. Integer, Float, Double, Long, Short, Byte, Boolean
Java 1.4
Integer i = new Integer(12);
int ii = i.intValue() + 1;
Integer iii = new Integer(ii);
Java 5
Integer i = 12;
int ii = i + 1;
Integer iii = ii;
Java 5 6 Lionel Seinturier
3. Types énumérés
• pouvoir définir des types dont les valeurs sont prises dans un ensemble donné
Java 1.4
• définition d'un type scalaire (ex. int)
• définition de constantes correspondant aux ≠cas
• inconvénient
– pas de garantie qu'une valeur non légale ne soit pas utilisée
• il faut systématiquement vérifié la légalité des valeurs
¾en pratique, pas fait …
Java 5
• mot-clé enum
enum <identifiant> { <liste de valeur> };
ex. : enum Color { RED, BLUE, GREEN, BLACK, WHITE };
Java 5 7 Lionel Seinturier
3. Types énumérés
• utilisation "comme un type"
Color myColor = Color.RED;
System.out.println( myColor );
• méthodes prédéfinies pour chaque type enum
– toString() : représentation sous forme de chaîne de la valeur
– values() : un tableau de toutes les valeurs
– valueOf(String) : retourne la valeur correspondant au paramètre (ou
IllegalArgumentException)
• enum définit un nouveau type (au même titre que class ou interface)
• mêmes règle de typage, introspection, …
• le compilateur génère une classe pour chaque type enum
– autant d'attributs que de valeurs énumérées (RED, …)
– les méthodes values, valueOf, toString
– la classe java.lang.Enum comme super-classe
Java 5 8 Lionel Seinturier
3. Types énumérés
La classe java.util.EnumSet
• permet de définir des ensembles de valeurs énumérées
– par dénombrement : EnumSet.of(…)
– par complément : EnumSet.complementOf(…)
– par intervalle : EnumSet.range(…)
EnumSet<Color> esc = null;
esc = EnumSet.of( Color.BLUE, Color.BLACK );
esc = EnumSet.complementOf(esc);
esc = EnumSet.range( Color.BUE, Color.BLACK );
esc = EnumSet.noneOf(Color.class); // EnumSet vide
Java 5 9 Lionel Seinturier
3. Types énumérés
Fonctionnalités avancées
• définition d'attributs, de méthodes et de constructeurs
• arguments pour les valeurs énumérées
• implémentation d'interfaces pour un type énuméré
• méthodes pour les valeurs énumérées
Java 5 10 Lionel Seinturier
3. Types énumérés
• définition d'attributs, de méthodes et de constructeurs
• arguments pour les valeurs énumérées
public enum Prefix {
MILLI("m",.001),
CENTI("c",0.01),
DECI("d",0.1); // point-virgule
Prefix( String pr, double value ) {
this.pr = pr;
this.value = value;
}
private String pr;
private double value;
public double getValue() {
return value; }
}
Utilisation
Prefix p = Prefix.MILLI;
p.getValue();
Java 5 11 Lionel Seinturier
3. Types énumérés
• implémentation d'interfaces pour un type énuméré
• méthodes pour les valeurs énumérées
interface Performable {
void perform( Stack s, int[] op );
}
enum OpCode implements Performable {
PUSH(1) {
public void perform(Stack s, int[] op) {
s.push(op[0]); }},
ADD(0) {
public void perform(Stack s, int[] op) {
s.push( s.pop() + s.pop() ); }};
OpCode(int numOp) { this.numOp = numOp; }
private int numOp;
}
Utilisation
OpCode op = OpCode.PUSH;
op.perform(
new Stack(),
new int[]{1} );
Java 5 12 Lionel Seinturier
Plan
1. Introduction
2. Auto-boxing
3. Types énumérés
4. Boucle for étendue
5. Annotations
6. Entrées/sorties formattées
7. varargs
8. Types génériques
Java 5 13 Lionel Seinturier
4. Boucle for étendue
• faciliter le parcours des éléments d'un tableau ou d'une collection
Java 1.4
Collection c = new ArrayList();
Iterator it = c.iterator();
while( it.hasNext() ) {
Object next = it.next();
...
}
Java 5
Collection c = new ArrayList();
for( Object o: c ) {
...
}
Java 5 14 Lionel Seinturier
4. Boucle for étendue
• limitation : pas d'accès à l'indice de l'itération
• peut s'employer avec tous les types qui implémentent j.l.Iterable
– implémenter méthode iterator()
• retourne une instance de la classe suivante
– définir une classe qui étend j.u.Iterator
• boolean hasNext()
• Object next()
• void remove()
Java 5 15 Lionel Seinturier
4. Boucle for étendue
class MyIterator implements Iterator {
public MyIterator( Object[] data ) {
this.data = data;
this.i = 0;
}
public boolean hasNext() {
return (i < data.length);
}
public Object next() {
Object next = data[i];
i++;
return next;
}
public void remove() {
i++;
}
Object[] data;
int i;
}
Java 5 16 Lionel Seinturier
public class MyData implements Iterable {
int pomme = 12;
List poires = Arrays.asList( {"Hello","world"} );
double orange = 3.14;
public Iterator iterator() {
return new MyIterator(
new Object[]{pomme,poires,orange} );
}
public static void main(String[] args) {
Iterable md = new MyData();
for (Object o : md) {
System.out.println(o);
}
}
}
4. Boucle for étendue
Java 5 17 Lionel Seinturier
Plan
1. Introduction
2. Auto-boxing
3. Types énumérés
4. Boucle for étendue
5. Annotations
6. Entrées/sorties formattées
7. varargs
8. Types génériques
Java 5 18 Lionel Seinturier
5. Annotations
• mécanisme pour ajouter des informations à un programme
– idée proche Javadoc
– généralisée ∀tous les types d'informations
– les annotations
• ne participent pas à l'exécution du programme (ex. Javadoc)
• ou indirectement
– ex. : données persistentes, objets distants, niveau de debug, …
• Java 1.4
– mécanisme XDoclet http://xdoclet.sourceforge.net
– Javadoc like : /** @something ... */
Java 5 19 Lionel Seinturier
5. Annotations
• Java 5
– mécanisme inclus en standard dans le langage
– nouveau mot-clé @interface pour définir une annotation
– chaque annotation peut être associée à des paramètres
• primitifs (int, double, …)
• String
•Class
• enum
• autres annotations
• tableau d'un des types précédents
– les paramètres sont des méthodes dans la définition de l'annotation
Exemple
public @interface Debug {
String devbuild();
int counter(); }
Java 5 20 Lionel Seinturier
5. Annotations
Utilisation
@Debug( devbuild="Beta", counter=12 )
class MyClass { ... }
• les annotations sont exploitées
– soit par le compilateur
– soit par des outils de transformation de code
• ex. :
– optmisation
– transformation vers des profils (ex. Java ME)
– génération de code (souche de com. distante, …)
– génération de design patterns
– génération du code technique (ex. EJB dans Java EE)
• APT (Annotation Processing Tool)
http://java.sun.com/j2se/1.5.0/docs/guide/apt/index.html
• Spoon http://spoon.gforge.inria.fr
1 / 11 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!