Cours 3, plusieurs classes (doc 2)

Programmation Avancée

Modérateur : douinj

guill_f58
Messages : 19
Inscription : 10 oct. 2020 19:42

Cours 3, plusieurs classes (doc 2)

Message par guill_f58 » 15 oct. 2020 11:11

Bonjour, j'ai essayé de refaire l'exemple sur le filtrage d'un tableau.
J'aimerais savoir pourquoi simplement faire une référence "new EstPair()" fonctionne alors que l'on ne désigne même pas le méthode "isTrue()" ?
Si je crée un objet EstPair() p = new EstPair() et que je l'assigne à la place, cela fonctionne aussi.
Merci

Main:

Code : Tout sélectionner

package estpair;

import java.util.ArrayList;
import java.util.Collection;


public class Main {


    public static void main(String[] args) {
        Collection<Integer> liste = new ArrayList<Integer>();
        liste.add(3);liste.add(4);liste.add(8);liste.add(3);
        System.out.println("Liste: " + liste);
            
        Utile.filtrer(liste, new EstPair());
        System.out.println("Liste: " + liste);
    }
    
}
Interface Condition:

Code : Tout sélectionner


package estpair;


public interface Condition<T> {
    public boolean isTrue(T t);
}
Classe EstPair

Code : Tout sélectionner


package estpair;


public class EstPair implements Condition{
  
    @Override
    public boolean isTrue(Object t) {
        if(t instanceof Integer) {
            Integer valeur = (Integer) t;
            if(valeur%2 == 0) {
                return true;
            }
        }
        return false;    
    }  
    
}
Classe Utile

Code : Tout sélectionner

package estpair;

import java.util.Iterator;

public class Utile {
    public static <T>void filtrer(Iterable<T> collection, Condition<T> condition) {
        Iterator<T> it = collection.iterator();
        while(it.hasNext()) {
            T t = it.next();
            if(!condition.isTrue(t)) {
                it.remove();
            }
        }
    }
}

douinj
Messages : 153
Inscription : 18 mars 2009 15:46

Re: Cours 3, plusieurs classes (doc 2)

Message par douinj » 15 oct. 2020 16:07

Bonjour
"new EstPair()" fonctionne alors que l'on ne désigne même pas le méthode "isTrue()" ?
Si je crée un objet EstPair() p = new EstPair() et que je l'assigne à la place, cela fonctionne aussi.
La classe EstPair implémente l'interface Condition, les méthodes définies dans l'interface sont donc accessibles

Vous auriez pu écrire, c'est même préférable
Condition<Integer> p = new EstPair()

Bon filtrage

guill_f58
Messages : 19
Inscription : 10 oct. 2020 19:42

Re: Cours 3, plusieurs classes (doc 2)

Message par guill_f58 » 15 oct. 2020 16:51

douinj a écrit :
15 oct. 2020 16:07
Bonjour
"new EstPair()" fonctionne alors que l'on ne désigne même pas le méthode "isTrue()" ?
Si je crée un objet EstPair() p = new EstPair() et que je l'assigne à la place, cela fonctionne aussi.
La classe EstPair implémente l'interface Condition, les méthodes définies dans l'interface sont donc accessibles

Vous auriez pu écrire, c'est même préférable
Condition<Integer> p = new EstPair()

Bon filtrage
Bonsoir, je retiens pour Condition<Integer> ...
Oui, je suis d'accord EstPair implémente l'interface Condition mais je ne comprends toujours pas comment ici "Utile.filtrer(liste, new EstPair());"
le compilateur sait que je parle de la condition "isTrue()" ? Que ce serait-il passé si j'avais eux plusieurs méthodes dans Condition au lieu d'une ?
Peut-être quelque chose m'échappe.
Merci

douinj
Messages : 153
Inscription : 18 mars 2009 15:46

Re: Cours 3, plusieurs classes (doc 2)

Message par douinj » 15 oct. 2020 19:02

re, regardez à nouveau les diapositives 55 à 58 du support associé au cours2 http://lmi92.cnam.fr/nfp121/supports/
j'ai trouvé ceci sur le web https://www.javatpoint.com/interface-in-java

Bonne Lecture

Répondre