SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
Java 8
Interfaces
antislashn.org Java 8 - interfaces 2 / 34
Introduction
● Java 8 modifie le concept d'interface, en permettant à
une interface d'avoir
● des méthodes statiques
● des méthodes par défaut
● une seule méthode abstraite, pour définir une interface
fonctionnelle
antislashn.org Java 8 - interfaces 3 / 34
Méthode statique
● Une interface peut recevoir des méthodes statiques
● une méthode statique ne peut pas être redéfinie dans une
classe fille
● ne peut pas utiliser la référence this, puisque statique
● Les méthodes statiques d'interface ne peuvent être
utilisées que sur l'interface
● par sur les classes implémentant l'interface
● classiquement, par le nom de l'interface
antislashn.org Java 8 - interfaces 4 / 34
Méthode statique
● Permet de regrouper un ensemble de fonctionnalités
dans une interface
● Améliore la sécurité, car les classes filles ne peuvent
pas redéfinir la méthode statique
● Une méthode statique ne peut pas se substituer à
une méthode de la classe Object
● erreur
– "This static method cannot hide the instance method from
Object"
antislashn.org Java 8 - interfaces 5 / 34
Méthode statique
● Exemple
public interface Foo {
static boolean isNullOrEmpty(String str) {
return str == null ? true : str.equals("") ? true : false;
}
}
antislashn.org Java 8 - interfaces 6 / 34
Méthode par défaut
● Le qualificateur default marque une méthode par
défaut
● la classe fille n'est pas obligée de fournir une
implémentation
● this est utilisable dans la méthode par défaut
– ce n'est pas une méthode statique
antislashn.org Java 8 - interfaces 7 / 34
Méthode par défaut
● Exemple
public interface Roulable
{
default void rouler(){
System.out.println("Objet pouvant rouler par défaut");
}
}
public class Ballon implements Roulable
{
}
public class De implements Roulable
{
@Override
public void rouler()
{
System.out.println("valeur obtenue : "+((int)(Math.random()*6)+1));
}
}
antislashn.org Java 8 - interfaces 8 / 34
Méthode par défaut
● Une première utilité des méthodes par défaut est
l'intégration de nouvelles fonctionnalités sans avoir à
intervenir sur le code existant
● assure la compatibilité avec le code déjà écrit pour
l'ancienne version d'une interface
antislashn.org Java 8 - interfaces 9 / 34
Méthode par défaut
● Permet d'implémenter le concept de trait en Java
● le trait, ou extension, encapsule un ensemble cohérent de
méthodes
● ensemble de méthodes concrètes pouvant être ajoutée à
une classe pour étendre ses fonctionnalités
● il est composé :
– d'une méthode abstraite
– des méthodes additionnelles implémentées par le trait et utilisant
la méthode abstraite
antislashn.org Java 8 - interfaces 10 / 34
Méthode par défaut
● Exemple de trait
● l'interface Java Comparable possède une méthode
unique compareTo()
– cette méthode renvoie un int
● il est intéressant sémantiquement d'avoir des méthodes
telles que :
– greaterThan()
– lessThan()
– isBefore()
– isAfter()
– isSame()
antislashn.org Java 8 - interfaces 11 / 34
Méthode par défaut
● Exemple de trait
● les classes concrètes implémentant Orderable auront
juste à définir la méthode compareTo(), héritée de
Comparable
public interface Odrderable<T> extends Comparable<T> {
public default boolean isAfter(T other) {
return compareTo(other) > 0;
}
public default boolean isBefore(T other) {
return compareTo(other) < 0;
}
public default boolean isSameAs(T other) {
return compareTo(other) == 0;
}
}
antislashn.org Java 8 - interfaces 12 / 34
Méthode par défaut
● Que ce passe-t-il si deux interfaces possèdent une
méthode par défaut ayant la même signature ?
● la classe qui implémente les deux interfaces doit fournir
une implémentation de la méthode
public interface InterfaceA {
default void foo() {
System.out.println("InterfaceA - foo()");
}
}
public interface InterfaceB {
default void foo() {
System.out.println("InterfaceB - foo()");
}
}
public class ABImpl implements InterfaceA, InterfaceB {
}
antislashn.org Java 8 - interfaces 13 / 34
Méthode par défaut
● Il suffit alors de fournir le code pour la méthode
foo()
● exemples d'implémentation
public class ABImpl implements InterfaceA, InterfaceB {
@Override
public void foo() {
System.out.println("ABImpl - foo()");
}
}
public class ABImpl implements InterfaceA, InterfaceB {
@Override
public void foo() {
InterfaceB.super.foo();
}
}
antislashn.org Java 8 - interfaces 14 / 34
Interface fonctionnelle
● Interface qui possède une seule méthode abstraite
● SAM : Single Abstract Method
● l'annotation @FunctionnalInterface permet au
compilateur de vérifier que l'interface ne comporte qu'une
seule méthode abstraite
● peut posséder des méthodes par défaut
@FunctionalInterface
public interface Operation
{
int compute(int x, int y);
}
antislashn.org Java 8 - interfaces 15 / 34
Interface fonctionnelle
● Objectif : définir une signature de méthode qui pourra
être utilisée pour passer en paramètre :
● une référence vers une méthode statique
● une référence vers une méthode d'instance
● une référence vers un constructeur
● une expression lambda
● Un certains nombre d'interfaces fonctionnelles sont
fournies par Java 8 dans le package
java.util.function
antislashn.org Java 8 - interfaces 16 / 34
Interface fonctionnelle
● Exemple d'interface fonctionnelle
● Exemple d'utilisation de l'interface
@FunctionalInterface
public interface Operation
{
int compute(int x, int y);
}
public class Calcul
{
public static int compute(int x, int y, Operation op){
return op.compute(x,y);
}
}
antislashn.org Java 8 - interfaces 17 / 34
Interface fonctionnelle
● Classiquement, cette interface est implémentée par
une classe
● utilisation
public class Addition implements Operation
{
@Override
public int compute(int x, int y)
{
return x+y;
}
}
...
Operation op = new Addition();
int r = Calcul.compute(2, 2, op);
...
antislashn.org Java 8 - interfaces 18 / 34
Interface fonctionnelle
● Ou passée comme classe anonyme
...
r = Calcul.compute(5, 6, new Operation()
{
@Override
public int compute(int x, int y)
{
return x-y;
}
});
...
antislashn.org Java 8 - interfaces 19 / 34
Interface fonctionnelle
● Exemple d'une interface de création
● retourne un objet fabriqué avec trois String
● Exemple de classe utilisant l'interface
@FunctionalInterface
public interface Creator<T> {
T create(String str1, String str2, String str3);
}
public class ContactParser<T> {
public T parse(String nomComplet, Creator<T> creator) {
String[] items = nomComplet.split(" ");
String civilite = items[0];
String nom = items[1];
String prenom = items[2];
return creator.create(civilite, nom, prenom);
}
}
antislashn.org Java 8 - interfaces 20 / 34
Interface fonctionnelle
● Exemple de classe Contact (extrait)
● le constructeur prend 3 paramètres de type String
public class Contact {
private String civilite;
private String nom;
private String prenom;
public Contact() {}
public Contact(String civilite, String nom, String prenom) {
this.civilite = civilite;
this.nom = nom;
this.prenom = prenom;
}
...
}
antislashn.org Java 8 - interfaces 21 / 34
Interface fonctionnelle
● Réponse de Java 8
● sans modification de l'existant nous pouvons passer toute
méthode qui
– accepte les mêmes types de paramètre
● 3 paramètres de type String
– retourne le même type
● générique T
antislashn.org Java 8 - interfaces 22 / 34
Interface fonctionnelle
● Avec Java 8, nous pouvons éviter la création d'une
classe anonyme de type Creator<Contact>
● par une référence vers le constructeur de Contact
– la syntaxe ::<method> définit une référence vers une méthode
● ici il y a bien un constructeur Contact(String,String, String)
ContactParser<Contact> parser = new ContactParser<>();
Contact contact = parser.parse("M LAGAFFE Gaston", Contact::new);
public class ContactParser<T> {
public T parse(String nomComplet, Creator<T> creator) {
,,,
return creator.create(civilite, nom, prenom);
}
}
antislashn.org Java 8 - interfaces 23 / 34
Référence à une méthode
● Syntaxe permettant de référencer directement une
méthode ou un constructeur
● opérateur ::
● référence à un constructeur par défaut
– sans paramètre
● référence à une méthode
– statique ou non
System.out::println o -> System.out.println(o)est équivalent à
antislashn.org Java 8 - interfaces 24 / 34
Référence à une méthode
● Exemples
public class Voiture
{
public static Voiture create(final Supplier<Voiture> supplier){
return supplier.get();
}
public void rouler(){
System.out.println("Rouler");
}
}
public static void main(String[] args)
{
List<Voiture> voitures = new ArrayList<>();
voitures.add(Voiture.create(Voiture::new));
voitures.add(Voiture.create(Voiture::new));
voitures.add(Voiture.create(Voiture::new));
voitures.forEach(Voiture::rouler);
}
antislashn.org Java 8 - interfaces 25 / 34
java.util.function
● Nombreuses interfaces fonctionnelles
● définies avec des types génériques
● Interfaces de base :
● Consumer
– accepte un argument T et ne retourne pas de résultat
● Function
– accepte un argument T et retourne un résultat R
● Supplier
– ne prend pas d'argument et retourne un résultat T
● Predicate
– test un valeur T et retourne un booléen
antislashn.org Java 8 - interfaces 26 / 34
java.util.function.Consumer
● Abstraction d'une opération acceptant un seul
argument et ne renvoyant aucun résultat
● méthodes
– accept(T t) : exécute une opération sur le paramètre
● méthode abstraite
– andThen(Consumer<? super T> after) : exécute
l'opération accept puis l'opération accept sur after
antislashn.org Java 8 - interfaces 27 / 34
java.util.function.Consumer
● Exemple
List<String> types = new ArrayList<>(Arrays.asList("rock","trip hop","jazz","pop","rock"));
List<String> result = new ArrayList<>();
Consumer<String> c1 = result::add;
Consumer<String> c2 = System.out::println;
Consumer<String> c3 = c1.andThen(c2);
types.stream().forEach(c3); // BAD PATTERN (result::add)
System.out.println(result);
antislashn.org Java 8 - interfaces 28 / 34
java.util.function.Supplier
● Abstraction d'une fonction retournant une valeur
● le Supplier produit une valeur
– abstraction d'un factory
● le Consumer consomme une valeur
● méthode
– T get() : produit une valeur de type T
● méthode abstraite
antislashn.org Java 8 - interfaces 29 / 34
java.util.function.Supplier
● Exemples
Supplier<Point> pointSupplier = new Supplier<Point>(){
private int i = 0;
@Override
public Point get(){
i++;
return new Point(i,i);
}
};
Point p1 = pointSupplier.get();
Point p2 = pointSupplier.get();
Supplier<Point> pointSupplier = Point::new;
Point p1 = pointSupplier.get();
Point p2 = pointSupplier.get();
antislashn.org Java 8 - interfaces 30 / 34
java.util.function.Function
● Abstraction d'une fonction acceptant un paramètre et
retournant un résultat
● Function<T,R> : T argument, R résultat
● méthodes
– R apply(T t) : applique la fonction à l'argument t
– <T> Function<T,T> identity() : retourne toujours l'argument
– <V> Function<R,V> andThen(Function<R,V> after) :
retourne une fonction qui applique la fonction, puis applique after sur
le résultat
– <V> Function<V,R> compose(Function<V,T> before) :
retourne une fonction qui applique before, puis applique la fonction
sur le résultat de before
antislashn.org Java 8 - interfaces 31 / 34
java.util.function.Function
● Exemple
List<Point> points = new ArrayList<>();
initPoints(points);
Function<Point,Integer> f1 = p -> p.getX();
Stream<Point> stream = points.stream();
Stream<Integer> xs = stream.map(f1);
xs.forEach(System.out::println);
antislashn.org Java 8 - interfaces 32 / 34
java.util.function.Predicate
● Abstraction d'un prédicat (fonction retournant true
ou false)
● méthodes
– test(T t) : évalue le prédicat sur t
● méthode abstraite
– and(), or(), isEqual(), negate() : permet l'évaluation et le
chaînage des prédicats
antislashn.org Java 8 - interfaces 33 / 34
java.util.function.Predicate
● Exemple
List<String> types = new ArrayList<>(Arrays.asList("rock","trip hop","jazz","pop","rock"));
Predicate<String> p1 = s -> s.length() >3;
Predicate<String> p2 = s -> s.length() <5;
List<String> result = types.stream().filter(p1.and(p2)).collect(Collectors.toList());
System.out.println(result);
antislashn.org Java 8 - interfaces 34 / 34
java.util.function
● Les interfaces de base servent à définir de
nombreuses interfaces fonctionnelles sur les types
de base
● IntConsumer
● LongToIntFunction
● DoubleSupplier
● cf. javadoc

Contenu connexe

Tendances

Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8LivePerson
 
String handling(string class)
String handling(string class)String handling(string class)
String handling(string class)Ravi_Kant_Sahu
 
Static keyword ppt
Static keyword pptStatic keyword ppt
Static keyword pptVinod Kumar
 
Collectors in the Wild
Collectors in the WildCollectors in the Wild
Collectors in the WildJosé Paumard
 
Introduction to jQuery
Introduction to jQueryIntroduction to jQuery
Introduction to jQueryZeeshan Khan
 
9. Input Output in java
9. Input Output in java9. Input Output in java
9. Input Output in javaNilesh Dalvi
 
Java Garbage Collection - How it works
Java Garbage Collection - How it worksJava Garbage Collection - How it works
Java Garbage Collection - How it worksMindfire Solutions
 
Project Reactor Now and Tomorrow
Project Reactor Now and TomorrowProject Reactor Now and Tomorrow
Project Reactor Now and TomorrowVMware Tanzu
 
JMeter - Performance testing your webapp
JMeter - Performance testing your webappJMeter - Performance testing your webapp
JMeter - Performance testing your webappAmit Solanki
 
Java 8 presentation
Java 8 presentationJava 8 presentation
Java 8 presentationVan Huong
 
Data Persistence in Android with Room Library
Data Persistence in Android with Room LibraryData Persistence in Android with Room Library
Data Persistence in Android with Room LibraryReinvently
 
Android-Tp5 : web services
Android-Tp5 : web servicesAndroid-Tp5 : web services
Android-Tp5 : web servicesLilia Sfaxi
 

Tendances (20)

Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8
 
String handling(string class)
String handling(string class)String handling(string class)
String handling(string class)
 
Static keyword ppt
Static keyword pptStatic keyword ppt
Static keyword ppt
 
Java Arrays
Java ArraysJava Arrays
Java Arrays
 
Java Method, Static Block
Java Method, Static BlockJava Method, Static Block
Java Method, Static Block
 
Collectors in the Wild
Collectors in the WildCollectors in the Wild
Collectors in the Wild
 
Introduction to jQuery
Introduction to jQueryIntroduction to jQuery
Introduction to jQuery
 
Java 8 streams
Java 8 streamsJava 8 streams
Java 8 streams
 
TestNG Framework
TestNG Framework TestNG Framework
TestNG Framework
 
Java exception handling
Java exception handlingJava exception handling
Java exception handling
 
9. Input Output in java
9. Input Output in java9. Input Output in java
9. Input Output in java
 
Java Garbage Collection - How it works
Java Garbage Collection - How it worksJava Garbage Collection - How it works
Java Garbage Collection - How it works
 
Project Reactor Now and Tomorrow
Project Reactor Now and TomorrowProject Reactor Now and Tomorrow
Project Reactor Now and Tomorrow
 
JMeter - Performance testing your webapp
JMeter - Performance testing your webappJMeter - Performance testing your webapp
JMeter - Performance testing your webapp
 
Java
JavaJava
Java
 
Handling I/O in Java
Handling I/O in JavaHandling I/O in Java
Handling I/O in Java
 
Java 8 presentation
Java 8 presentationJava 8 presentation
Java 8 presentation
 
Data Persistence in Android with Room Library
Data Persistence in Android with Room LibraryData Persistence in Android with Room Library
Data Persistence in Android with Room Library
 
String Handling
String HandlingString Handling
String Handling
 
Android-Tp5 : web services
Android-Tp5 : web servicesAndroid-Tp5 : web services
Android-Tp5 : web services
 

Similaire à Java 8 - interfaces

Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfacesAziz Darouichi
 
POO - Chapitre6.pptx
POO - Chapitre6.pptxPOO - Chapitre6.pptx
POO - Chapitre6.pptxRAYENBOUAFIF1
 
Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?Fou Cha
 
Geek Time Janvier 2017 : Java 8
Geek Time Janvier 2017 : Java 8Geek Time Janvier 2017 : Java 8
Geek Time Janvier 2017 : Java 8OLBATI
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 OverviewGregory Renard
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Jean-Michel Doudoux
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introductionneuros
 
201305 - Lambda by R. Forax
201305 - Lambda by R. Forax201305 - Lambda by R. Forax
201305 - Lambda by R. Foraxlyonjug
 
Chapitre4 cours de java
Chapitre4 cours de javaChapitre4 cours de java
Chapitre4 cours de javainfo1994
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinterRYMAA
 
Eric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharpEric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharpMSDEVMTL
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Loic Yon
 
chapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdfchapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdfMoez Moezm
 
Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20Jean-Michel Doudoux
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07haythem_2015
 

Similaire à Java 8 - interfaces (20)

Java 8 - lambda
Java 8 - lambdaJava 8 - lambda
Java 8 - lambda
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfaces
 
Memo java
Memo javaMemo java
Memo java
 
POO - Chapitre6.pptx
POO - Chapitre6.pptxPOO - Chapitre6.pptx
POO - Chapitre6.pptx
 
Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?
 
Geek Time Janvier 2017 : Java 8
Geek Time Janvier 2017 : Java 8Geek Time Janvier 2017 : Java 8
Geek Time Janvier 2017 : Java 8
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 Overview
 
ExJava.pdf
ExJava.pdfExJava.pdf
ExJava.pdf
 
Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016Retours sur java 8 devoxx fr 2016
Retours sur java 8 devoxx fr 2016
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introduction
 
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweightCours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweight
 
201305 - Lambda by R. Forax
201305 - Lambda by R. Forax201305 - Lambda by R. Forax
201305 - Lambda by R. Forax
 
Chapitre4 cours de java
Chapitre4 cours de javaChapitre4 cours de java
Chapitre4 cours de java
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinter
 
Eric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharpEric Moreau: AOP in .Net sing PostSharp
Eric Moreau: AOP in .Net sing PostSharp
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
 
chapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdfchapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdf
 
Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20Devoxx France 2023 - Les nouveautés de Java 19 et 20
Devoxx France 2023 - Les nouveautés de Java 19 et 20
 
C++ 11/14
C++ 11/14C++ 11/14
C++ 11/14
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07
 

Plus de Franck SIMON

Distribuer une librairie via maven
Distribuer une librairie via mavenDistribuer une librairie via maven
Distribuer une librairie via mavenFranck SIMON
 
Java 8 - collections et stream
Java 8 - collections et streamJava 8 - collections et stream
Java 8 - collections et streamFranck SIMON
 
Gwt jetty et sources de données
Gwt   jetty et sources de donnéesGwt   jetty et sources de données
Gwt jetty et sources de donnéesFranck SIMON
 
Description d'un fichier de prélèvements SEPA minimum
Description d'un fichier de prélèvements SEPA minimumDescription d'un fichier de prélèvements SEPA minimum
Description d'un fichier de prélèvements SEPA minimumFranck SIMON
 
Tomcat and apache httpd training
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd trainingFranck SIMON
 
JBoss - chapitre JMX
JBoss - chapitre JMXJBoss - chapitre JMX
JBoss - chapitre JMXFranck SIMON
 
Java - programmation concurrente
Java - programmation concurrenteJava - programmation concurrente
Java - programmation concurrenteFranck SIMON
 
Android Input Method Editor
Android   Input Method EditorAndroid   Input Method Editor
Android Input Method EditorFranck SIMON
 
Architectures distribuées
Architectures distribuéesArchitectures distribuées
Architectures distribuéesFranck SIMON
 
Développement Android
Développement AndroidDéveloppement Android
Développement AndroidFranck SIMON
 
Java scripting api
Java scripting apiJava scripting api
Java scripting apiFranck SIMON
 

Plus de Franck SIMON (17)

Distribuer une librairie via maven
Distribuer une librairie via mavenDistribuer une librairie via maven
Distribuer une librairie via maven
 
Java 9 modules
Java 9    modulesJava 9    modules
Java 9 modules
 
Java 8 - DateTime
Java 8 - DateTimeJava 8 - DateTime
Java 8 - DateTime
 
Java 8 - collections et stream
Java 8 - collections et streamJava 8 - collections et stream
Java 8 - collections et stream
 
Gwt jetty et sources de données
Gwt   jetty et sources de donnéesGwt   jetty et sources de données
Gwt jetty et sources de données
 
Description d'un fichier de prélèvements SEPA minimum
Description d'un fichier de prélèvements SEPA minimumDescription d'un fichier de prélèvements SEPA minimum
Description d'un fichier de prélèvements SEPA minimum
 
Tomcat and apache httpd training
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd training
 
Android ORMLite
Android   ORMLiteAndroid   ORMLite
Android ORMLite
 
JBoss - chapitre JMX
JBoss - chapitre JMXJBoss - chapitre JMX
JBoss - chapitre JMX
 
Java - programmation concurrente
Java - programmation concurrenteJava - programmation concurrente
Java - programmation concurrente
 
Android Input Method Editor
Android   Input Method EditorAndroid   Input Method Editor
Android Input Method Editor
 
Squid
SquidSquid
Squid
 
Architectures distribuées
Architectures distribuéesArchitectures distribuées
Architectures distribuées
 
Android NDK
Android   NDKAndroid   NDK
Android NDK
 
Développement Android
Développement AndroidDéveloppement Android
Développement Android
 
jQuery
jQueryjQuery
jQuery
 
Java scripting api
Java scripting apiJava scripting api
Java scripting api
 

Dernier

Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne FontaineTxaruka
 
Présentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxPrésentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxpopzair
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.Txaruka
 
présentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteurprésentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteurdinaelchaine
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptxTxaruka
 
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxssusercbaa22
 
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...M2i Formation
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprisesMajdaKtiri2
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptxMalikaIdseaid1
 
Grammaire pour les élèves de la 6ème.doc
Grammaire pour les élèves de la  6ème.docGrammaire pour les élèves de la  6ème.doc
Grammaire pour les élèves de la 6ème.docKarimKhrifech
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...Faga1939
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.Franck Apolis
 
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptMécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptssusercbaa22
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptxSAID MASHATE
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipM2i Formation
 
systeme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertsysteme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertChristianMbip
 
Cours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxCours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxlamourfrantz
 
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdfMICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdfssuser40e112
 

Dernier (20)

Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne Fontaine
 
Présentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxPrésentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptx
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
présentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteurprésentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteur
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptx
 
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
 
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 
Pâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie PelletierPâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie Pelletier
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptx
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 
Grammaire pour les élèves de la 6ème.doc
Grammaire pour les élèves de la  6ème.docGrammaire pour les élèves de la  6ème.doc
Grammaire pour les élèves de la 6ème.doc
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.
 
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptMécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadership
 
systeme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertsysteme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expert
 
Cours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxCours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptx
 
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdfMICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
 

Java 8 - interfaces

  • 2. antislashn.org Java 8 - interfaces 2 / 34 Introduction ● Java 8 modifie le concept d'interface, en permettant à une interface d'avoir ● des méthodes statiques ● des méthodes par défaut ● une seule méthode abstraite, pour définir une interface fonctionnelle
  • 3. antislashn.org Java 8 - interfaces 3 / 34 Méthode statique ● Une interface peut recevoir des méthodes statiques ● une méthode statique ne peut pas être redéfinie dans une classe fille ● ne peut pas utiliser la référence this, puisque statique ● Les méthodes statiques d'interface ne peuvent être utilisées que sur l'interface ● par sur les classes implémentant l'interface ● classiquement, par le nom de l'interface
  • 4. antislashn.org Java 8 - interfaces 4 / 34 Méthode statique ● Permet de regrouper un ensemble de fonctionnalités dans une interface ● Améliore la sécurité, car les classes filles ne peuvent pas redéfinir la méthode statique ● Une méthode statique ne peut pas se substituer à une méthode de la classe Object ● erreur – "This static method cannot hide the instance method from Object"
  • 5. antislashn.org Java 8 - interfaces 5 / 34 Méthode statique ● Exemple public interface Foo { static boolean isNullOrEmpty(String str) { return str == null ? true : str.equals("") ? true : false; } }
  • 6. antislashn.org Java 8 - interfaces 6 / 34 Méthode par défaut ● Le qualificateur default marque une méthode par défaut ● la classe fille n'est pas obligée de fournir une implémentation ● this est utilisable dans la méthode par défaut – ce n'est pas une méthode statique
  • 7. antislashn.org Java 8 - interfaces 7 / 34 Méthode par défaut ● Exemple public interface Roulable { default void rouler(){ System.out.println("Objet pouvant rouler par défaut"); } } public class Ballon implements Roulable { } public class De implements Roulable { @Override public void rouler() { System.out.println("valeur obtenue : "+((int)(Math.random()*6)+1)); } }
  • 8. antislashn.org Java 8 - interfaces 8 / 34 Méthode par défaut ● Une première utilité des méthodes par défaut est l'intégration de nouvelles fonctionnalités sans avoir à intervenir sur le code existant ● assure la compatibilité avec le code déjà écrit pour l'ancienne version d'une interface
  • 9. antislashn.org Java 8 - interfaces 9 / 34 Méthode par défaut ● Permet d'implémenter le concept de trait en Java ● le trait, ou extension, encapsule un ensemble cohérent de méthodes ● ensemble de méthodes concrètes pouvant être ajoutée à une classe pour étendre ses fonctionnalités ● il est composé : – d'une méthode abstraite – des méthodes additionnelles implémentées par le trait et utilisant la méthode abstraite
  • 10. antislashn.org Java 8 - interfaces 10 / 34 Méthode par défaut ● Exemple de trait ● l'interface Java Comparable possède une méthode unique compareTo() – cette méthode renvoie un int ● il est intéressant sémantiquement d'avoir des méthodes telles que : – greaterThan() – lessThan() – isBefore() – isAfter() – isSame()
  • 11. antislashn.org Java 8 - interfaces 11 / 34 Méthode par défaut ● Exemple de trait ● les classes concrètes implémentant Orderable auront juste à définir la méthode compareTo(), héritée de Comparable public interface Odrderable<T> extends Comparable<T> { public default boolean isAfter(T other) { return compareTo(other) > 0; } public default boolean isBefore(T other) { return compareTo(other) < 0; } public default boolean isSameAs(T other) { return compareTo(other) == 0; } }
  • 12. antislashn.org Java 8 - interfaces 12 / 34 Méthode par défaut ● Que ce passe-t-il si deux interfaces possèdent une méthode par défaut ayant la même signature ? ● la classe qui implémente les deux interfaces doit fournir une implémentation de la méthode public interface InterfaceA { default void foo() { System.out.println("InterfaceA - foo()"); } } public interface InterfaceB { default void foo() { System.out.println("InterfaceB - foo()"); } } public class ABImpl implements InterfaceA, InterfaceB { }
  • 13. antislashn.org Java 8 - interfaces 13 / 34 Méthode par défaut ● Il suffit alors de fournir le code pour la méthode foo() ● exemples d'implémentation public class ABImpl implements InterfaceA, InterfaceB { @Override public void foo() { System.out.println("ABImpl - foo()"); } } public class ABImpl implements InterfaceA, InterfaceB { @Override public void foo() { InterfaceB.super.foo(); } }
  • 14. antislashn.org Java 8 - interfaces 14 / 34 Interface fonctionnelle ● Interface qui possède une seule méthode abstraite ● SAM : Single Abstract Method ● l'annotation @FunctionnalInterface permet au compilateur de vérifier que l'interface ne comporte qu'une seule méthode abstraite ● peut posséder des méthodes par défaut @FunctionalInterface public interface Operation { int compute(int x, int y); }
  • 15. antislashn.org Java 8 - interfaces 15 / 34 Interface fonctionnelle ● Objectif : définir une signature de méthode qui pourra être utilisée pour passer en paramètre : ● une référence vers une méthode statique ● une référence vers une méthode d'instance ● une référence vers un constructeur ● une expression lambda ● Un certains nombre d'interfaces fonctionnelles sont fournies par Java 8 dans le package java.util.function
  • 16. antislashn.org Java 8 - interfaces 16 / 34 Interface fonctionnelle ● Exemple d'interface fonctionnelle ● Exemple d'utilisation de l'interface @FunctionalInterface public interface Operation { int compute(int x, int y); } public class Calcul { public static int compute(int x, int y, Operation op){ return op.compute(x,y); } }
  • 17. antislashn.org Java 8 - interfaces 17 / 34 Interface fonctionnelle ● Classiquement, cette interface est implémentée par une classe ● utilisation public class Addition implements Operation { @Override public int compute(int x, int y) { return x+y; } } ... Operation op = new Addition(); int r = Calcul.compute(2, 2, op); ...
  • 18. antislashn.org Java 8 - interfaces 18 / 34 Interface fonctionnelle ● Ou passée comme classe anonyme ... r = Calcul.compute(5, 6, new Operation() { @Override public int compute(int x, int y) { return x-y; } }); ...
  • 19. antislashn.org Java 8 - interfaces 19 / 34 Interface fonctionnelle ● Exemple d'une interface de création ● retourne un objet fabriqué avec trois String ● Exemple de classe utilisant l'interface @FunctionalInterface public interface Creator<T> { T create(String str1, String str2, String str3); } public class ContactParser<T> { public T parse(String nomComplet, Creator<T> creator) { String[] items = nomComplet.split(" "); String civilite = items[0]; String nom = items[1]; String prenom = items[2]; return creator.create(civilite, nom, prenom); } }
  • 20. antislashn.org Java 8 - interfaces 20 / 34 Interface fonctionnelle ● Exemple de classe Contact (extrait) ● le constructeur prend 3 paramètres de type String public class Contact { private String civilite; private String nom; private String prenom; public Contact() {} public Contact(String civilite, String nom, String prenom) { this.civilite = civilite; this.nom = nom; this.prenom = prenom; } ... }
  • 21. antislashn.org Java 8 - interfaces 21 / 34 Interface fonctionnelle ● Réponse de Java 8 ● sans modification de l'existant nous pouvons passer toute méthode qui – accepte les mêmes types de paramètre ● 3 paramètres de type String – retourne le même type ● générique T
  • 22. antislashn.org Java 8 - interfaces 22 / 34 Interface fonctionnelle ● Avec Java 8, nous pouvons éviter la création d'une classe anonyme de type Creator<Contact> ● par une référence vers le constructeur de Contact – la syntaxe ::<method> définit une référence vers une méthode ● ici il y a bien un constructeur Contact(String,String, String) ContactParser<Contact> parser = new ContactParser<>(); Contact contact = parser.parse("M LAGAFFE Gaston", Contact::new); public class ContactParser<T> { public T parse(String nomComplet, Creator<T> creator) { ,,, return creator.create(civilite, nom, prenom); } }
  • 23. antislashn.org Java 8 - interfaces 23 / 34 Référence à une méthode ● Syntaxe permettant de référencer directement une méthode ou un constructeur ● opérateur :: ● référence à un constructeur par défaut – sans paramètre ● référence à une méthode – statique ou non System.out::println o -> System.out.println(o)est équivalent à
  • 24. antislashn.org Java 8 - interfaces 24 / 34 Référence à une méthode ● Exemples public class Voiture { public static Voiture create(final Supplier<Voiture> supplier){ return supplier.get(); } public void rouler(){ System.out.println("Rouler"); } } public static void main(String[] args) { List<Voiture> voitures = new ArrayList<>(); voitures.add(Voiture.create(Voiture::new)); voitures.add(Voiture.create(Voiture::new)); voitures.add(Voiture.create(Voiture::new)); voitures.forEach(Voiture::rouler); }
  • 25. antislashn.org Java 8 - interfaces 25 / 34 java.util.function ● Nombreuses interfaces fonctionnelles ● définies avec des types génériques ● Interfaces de base : ● Consumer – accepte un argument T et ne retourne pas de résultat ● Function – accepte un argument T et retourne un résultat R ● Supplier – ne prend pas d'argument et retourne un résultat T ● Predicate – test un valeur T et retourne un booléen
  • 26. antislashn.org Java 8 - interfaces 26 / 34 java.util.function.Consumer ● Abstraction d'une opération acceptant un seul argument et ne renvoyant aucun résultat ● méthodes – accept(T t) : exécute une opération sur le paramètre ● méthode abstraite – andThen(Consumer<? super T> after) : exécute l'opération accept puis l'opération accept sur after
  • 27. antislashn.org Java 8 - interfaces 27 / 34 java.util.function.Consumer ● Exemple List<String> types = new ArrayList<>(Arrays.asList("rock","trip hop","jazz","pop","rock")); List<String> result = new ArrayList<>(); Consumer<String> c1 = result::add; Consumer<String> c2 = System.out::println; Consumer<String> c3 = c1.andThen(c2); types.stream().forEach(c3); // BAD PATTERN (result::add) System.out.println(result);
  • 28. antislashn.org Java 8 - interfaces 28 / 34 java.util.function.Supplier ● Abstraction d'une fonction retournant une valeur ● le Supplier produit une valeur – abstraction d'un factory ● le Consumer consomme une valeur ● méthode – T get() : produit une valeur de type T ● méthode abstraite
  • 29. antislashn.org Java 8 - interfaces 29 / 34 java.util.function.Supplier ● Exemples Supplier<Point> pointSupplier = new Supplier<Point>(){ private int i = 0; @Override public Point get(){ i++; return new Point(i,i); } }; Point p1 = pointSupplier.get(); Point p2 = pointSupplier.get(); Supplier<Point> pointSupplier = Point::new; Point p1 = pointSupplier.get(); Point p2 = pointSupplier.get();
  • 30. antislashn.org Java 8 - interfaces 30 / 34 java.util.function.Function ● Abstraction d'une fonction acceptant un paramètre et retournant un résultat ● Function<T,R> : T argument, R résultat ● méthodes – R apply(T t) : applique la fonction à l'argument t – <T> Function<T,T> identity() : retourne toujours l'argument – <V> Function<R,V> andThen(Function<R,V> after) : retourne une fonction qui applique la fonction, puis applique after sur le résultat – <V> Function<V,R> compose(Function<V,T> before) : retourne une fonction qui applique before, puis applique la fonction sur le résultat de before
  • 31. antislashn.org Java 8 - interfaces 31 / 34 java.util.function.Function ● Exemple List<Point> points = new ArrayList<>(); initPoints(points); Function<Point,Integer> f1 = p -> p.getX(); Stream<Point> stream = points.stream(); Stream<Integer> xs = stream.map(f1); xs.forEach(System.out::println);
  • 32. antislashn.org Java 8 - interfaces 32 / 34 java.util.function.Predicate ● Abstraction d'un prédicat (fonction retournant true ou false) ● méthodes – test(T t) : évalue le prédicat sur t ● méthode abstraite – and(), or(), isEqual(), negate() : permet l'évaluation et le chaînage des prédicats
  • 33. antislashn.org Java 8 - interfaces 33 / 34 java.util.function.Predicate ● Exemple List<String> types = new ArrayList<>(Arrays.asList("rock","trip hop","jazz","pop","rock")); Predicate<String> p1 = s -> s.length() >3; Predicate<String> p2 = s -> s.length() <5; List<String> result = types.stream().filter(p1.and(p2)).collect(Collectors.toList()); System.out.println(result);
  • 34. antislashn.org Java 8 - interfaces 34 / 34 java.util.function ● Les interfaces de base servent à définir de nombreuses interfaces fonctionnelles sur les types de base ● IntConsumer ● LongToIntFunction ● DoubleSupplier ● cf. javadoc