Java FX Partie2
Java FX Partie2
Java FX Partie2
JavaFX
2 - Complments de
programmation
Jacques BAPST
jacques.bapst@hefr.ch
Prambule
Ce chapitre introduit de manire sommaire quelques lments de
programmation qui, faute de temps, n'ont pas t vus durant le
cours de programmation du premier semestre.
Ces lments sont cependant utiles, voire ncessaires dans le cadre
des programmes Java/JavaFX comportant des interfaces graphiques
(GUI).
La prsentation de ces concepts se limite aux lments essentiels qui
sont ncessaires dans le cadre du cours IHM-1.
IHM-1 FX02
Jacques BAPST
numrations
IHM-1 FX01
Jacques BAPST
numrations [1]
En Java, le mot-cl enum permet de dfinir un type numr.
L'utilisation de enum dfinit une classe spciale (appele enum type)
qui hrite implicitement de java.lang.Enum et qui permet de
reprsenter un ensemble fixe de constantes (des champs qui sont
implicitement static et final) que l'on crit donc en majuscules.
Une variable de type numr ne peut prendre qu'une des valeurs
constantes dfinies pour le type considr (ou null ).
Exemple de dfinition du type numr EColor :
public enum EColor {RED, BLUE, GREEN, YELLOW}
IHM-1 FX02
Jacques BAPST
numrations [2]
Exemple d'utilisation du type EColor :
public class TestEColor {
IHM-1 FX02
Jacques BAPST
numrations [3]
On peut s'pargner la notation prfixe (type.constante) en ajoutant
une importation statique des lments du type numr.
Exemple d'utilisation avec importation statique des constantes :
import static ex.chap02.EColor.*;
public class TestEColor {
public static void main(String[] args) {
EColor color = BLUE;
if (args.length > 0) color = RED;
System.out.println(color);
}
}
IHM-1 FX02
Jacques BAPST
numrations [4]
Pour tous les types numrs, une mthode statique values() est
implicitement dclare.
Elle retourne un tableau des constantes d'numration dans leur
ordre de dclaration.
Le programme affichera :
RED BLUE GREEN YELLOW
IHM-1 FX02
Jacques BAPST
numrations [5]
Pour tous les types numrs, une mthode statique valueOf() est
implicitement dclare.
Cette mthode convertit une chane de caractres (passe en
paramtre) en un lment du type numr ou lve l'exception
IllegalArgumentException si la conversion n'est pas possible
(attention, la mthode est sensible la casse [minuscules/majuscules]).
Exemple de conversion d'une chane de caractres en un lment de
type numr :
public class TestEColor {
public static void main(String[] args) {
EColor yColor = EColor.valueOf("YELLOW");
System.out.println(yColor);
}
}
IHM-1 FX02
Jacques BAPST
numrations [6]
La mthode d'instance name() retourne un String correspondant
la reprsentation textuelle d'une variable de type numr (elle
se comporte de la mme manire que la mthode toString()).
Exemple :
// 3 for YELLOW
Jacques BAPST
Gnricit
Types gnriques
IHM-1 FX01
Jacques BAPST
10
Jacques BAPST
11
public T get() {
return obj;
}
public void set(T obj) {
this.obj = obj;
}
}
Jacques BAPST
12
intBox.set(5);
strBox.set("Hello");
p2dBox.set(new Point2D(1.2, 3.4));
System.out.println(p2dBox.get());
}
IHM-1 FX02
Jacques BAPST
13
IHM-1 FX02
Jacques BAPST
14
// Raw type
b.set(8);
b.set("Hello");
IHM-1 FX02
Jacques BAPST
15
ou
Jacques BAPST
16
Jacques BAPST
17
Integer
IHM-1 FX02
List<Object>
List<Integer>
Object
List<Object>
Jacques BAPST
List<Integer>
18
C o mp l me nt
// Erreur la compilation
IHM-1 FX02
Jacques BAPST
19
classes. Cette notation est galement valable pour toutes les classes
qui implmentent l'interface type.
[upper bounded]
<? super type> acceptera la classe type ainsi que toutes les classes
parentes de type.
[lower bounded]
Jacques BAPST
20
C o mp l me nt
Jacques BAPST
21
Exemple :
public static <T> boolean contains(Box<T> box, T value) {
return box.get().equals(value);
}
Box.<Float>contains(fBox, 1.2f);
IHM-1 FX02
Jacques BAPST
22
Annotations
IHM-1 FX01
Jacques BAPST
23
Annotations [1]
En Java, une annotation constitue une mtadonne que l'on peut
appliquer diffrents lments du code source.
Les annotations n'ont pas d'effet direct sur le fonctionnement des
instructions annotes.
Jacques BAPST
24
Annotations [2]
Sans l'annotation @Override le code fonctionne parfaitement (et de
manire identique) mais le programmeur ne serait pas averti qu'il cre
une nouvelle mthode d'instance (faute de frappe par ex.) alors qu'il
voulait redfinir une mthode d'une des classes parentes.
Une annotation peut inclure un ou plusieurs paramtres :
@Author (name = "Tryphon Tournesol",
date = "06.06.2016"
)
public class MyClass {
. . .
}
Jacques BAPST
25
Annotations [3]
Des annotations multiples peuvent tre attribues une mme
dclaration (une mme annotation peut galement tre rpte).
@Author (name = "Tryphon Tournesol")
@Author (name = "Archibald Haddock")
@EBook
public class MyClass {
. . .
}
// Repeating annotations
// Repeating annotations
Jacques BAPST
26
Annotations [4]
Il existe un certain nombre d'annotations prdfinies, traites par le
compilateur ou par certains outils standard de la plateforme Java.
Exemples : @Deprecated, @Override, @SuppressWarnings,
@SafeVarargs, @FunctionalInterface,
IHM-1 FX02
Jacques BAPST
27
Expressions Lambda
Rfrences de mthodes
IHM-1 FX01
Jacques BAPST
28
(parameters) ->
expression
(parameters) -> { statements; }
Jacques BAPST
29
(x, y) -> x + y
x -> x * x
() -> 123
s -> System.out.println(s)
IHM-1 FX02
Jacques BAPST
30
Jacques BAPST
31
// Cration du thread
Un des rsultats
possibles l'excution
IHM-1 FX02
Jacques BAPST
A0
B0
B1
B2
A1
A2
B3
B4
B5
A3
B6
B7
B8
A4
B9
A5
A6
A7
A8
A9
A10
A11
B10
...
32
@FunctionalInterface
public interface Supplier<T> {
T get(); // Gets a T type result
}
// Function : Represents a function that accepts one argument
//
and produces a result
//--------------------------------------------------------------------
@FunctionalInterface
public interface Function<T, R> {
R apply(T t); // Applies this function to the given argument
}
IHM-1 FX02
Jacques BAPST
33
Type
Param
Type
Retour
Mthode
Description
abstraite
Runnable
void
run
Supplier<T>
get
Consumer<T>
void
accept
chain
void
accept
chain
BiConsumer
T, U
<T, U>
Function
<T, R>
BiFunction
T, U
<T, U, R>
Autres
Mthodes
apply
compose,
andThen,
identity
apply
andThen
UnaryOperator
T
<T>
apply
compose,
andThen,
identity
BinaryOperator
T, T
<T>
apply
andThen
IHM-1 FX02
Jacques BAPST
34
Type
Param
Type
Retour
Predicate<T>
boolean test
boolean test
BiPredicate
T, U
<T, U>
Mthode
Description
abstraite
Autres
Mthodes
and, or,
negate,
isEqual
and, or,
negate
Type
Param
Type
Retour
Mthode
Description
abstraite
IntFunction<T>
int
apply
LongPredicate
long
boolean test
and, or,
negate
...
...
...
. . . et beaucoup d'autres . . .
...
IHM-1 FX02
...
Autres
Mthodes
Jacques BAPST
35
Class :: staticMethodName
instance :: instanceMethodName
Class :: instanceMethodName
Exemples avec quivalences en expressions lambda :
Variante
Exemple
Lambda quivalent
Class::staticMethodName
String::valueOf
instance::instanceMethodName
obj::toString
() -> obj.toString()
Class::instanceMethodName
String::toString
Class::instanceMethodName
String::charAt
IHM-1 FX02
Jacques BAPST
36
Exemple variante 2 :
Random r = new Random();
Supplier<Double> random = r::nextDouble;
double result2 = random.get(); // r.nextDouble();
IHM-1 FX02
Jacques BAPST
37
// s1.length()
// s2.length()
Jacques BAPST
38
Exemple
Lambda quivalent
Class::new
String::new
Class::new
PointHolder::new
IHM-1 FX02
Jacques BAPST
39
IHM-1 FX02
// new Button("Ok");
// new Button("Quit");
Jacques BAPST
40
IHM-1 FX02
Jacques BAPST
41
Jacques BAPST
42
Stream
IHM-1 FX01
Jacques BAPST
43
IHM-1 FX02
Jacques BAPST
44
Operation
pipeline
C1
C2
Jacques BAPST
45
Jacques BAPST
46