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 linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !