Mapping Class Java [Résolu/Fermé]

Signaler
Messages postés
53
Date d'inscription
dimanche 23 mars 2014
Statut
Membre
Dernière intervention
10 mars 2017
-
Messages postés
16361
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
11 juin 2021
-
Bonjour à tous,

Dans le cadre d'un exercice je souhaite faire un mapping sur mes classes.

Cependant je rencontre un problème (ou peut-être plusieurs, je suis pas sûr de mon coup ^^'')

La classe Garage.java :

package exercice5;

import java.util.*;

public class Garage implements Iterable<Vehicule>, VehiculeComparator, Map {
	
	private List<Vehicule> garage;
	
	public Garage()
	{
		this.garage = new ArrayList<Vehicule>();
	}
	
	public void add(Vehicule v)
	{
		this.garage.add(v);
	}

@Override
	public void map(Function f) {
		
		for(Vehicule v : garage)
		{
			f.applyIt(v);
		}
	}


La classe Vehicule.java :

package exercice5;


import java.text.DecimalFormat;

public class Vehicule implements Comparable<Vehicule>, Function {

@Override
	public void applyIt(Vehicule v) {
		
		v.getCompteur().resetPartiel();
	}	



Et mes deux interfaces Map et Function pour le mapping :

public interface Function {
	
	abstract public void applyIt(Vehicule v);

}

public interface Map {
	
	abstract public void map(Function f);

}





Mes deux interfaces sont dans un fichier séparé.

Donc j'implémente l'interface map dans ma classe Garage et l'interface Function dans ma classe Vehicule.

Ce que je ne parviens pas à faire serait de déclarer une instance de Garage et d'accéder à une méthode qui me permette comme je le voudrai de mettre les compteurs à 0.

Exemple :
 Garage g = new Garage(); g.resetAll(); 


En admettant bien sûr qu'il y ai déjà des Vehicule de présents dans le Garage.

Mon problème est la création de la méthode resetAll() que je mettrai dans la classe Garage. Je ne sais pas quoi instancier car ma méthode :
 public void map(Function f) 
prend en paramètre un type Function.


J'espère avoir expliqué au mieux mon problème et avoir mis assez de code pour que ce sois compréhensible :/

Si quelqu'un aurait la gentillesse de m'expliquer je lui en saurait très reconnaissant ! :D

3 réponses

Messages postés
16361
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
11 juin 2021
2 842
Bonjour,

C'est une mauvaise idée d'appeler tes classes Map et Function...
On ne peut pas te demander de connaître les 4000 classes fournies par Java mais il y en a quelques unes comme Map qui sont incontournables et si tu réutilises ce nom pour faire d'autres classes qui n'ont rien à voir, cela va rapidement poser problème, en particulier si tu fais un import big bang avec java.util.* alors que justement la classe Map de Java est dans java.util

Donc déjà, enlèves l'
import java.util.*;
pour le remplacer par des imports plus spécifiques (List, ArrayList, Iterator), et précises à quoi est censé servir ta classe "Map" dans ton cas.

Ensuite, les méthodes dans les interfaces ne doivent pas porter le mot clé abstract (c'est réservé aux classes abstraites).

Remarque : un code complet serait le bienvenue, parce qu'en l'état je ne peux pas tester vu qu'il manque des méthodes un peu partout... ce qui ne m'aide pas non plus pour comprendre ce que tu cherches à faire (c'est confus)

PS. En quelle version de Java est-ce que tu codes ?
La confiance n'exclut pas le contrôle
Messages postés
53
Date d'inscription
dimanche 23 mars 2014
Statut
Membre
Dernière intervention
10 mars 2017

Merci pour ta réponse, je code avec la dernière version de Eclipse je ne sais pas quelle est la version de Java ...

Je comprends ce que tu me dis j'ai donc fais les changements nécessaires et j'ai "réussi" à trouver une façon de faire qui fait ce que je veux :

public void resetPartielAll()
	{
		Function f = new Function() {
			
			@Override
			public void applyIt(Vehicule v) {
				
				v.getCompteur().resetPartiel();
			}
		};
		
		map(f);
	}


Je crée ma Function et je redéfinis la méthode contenue dans l'interface pour ensuite la passer en paramètre à ma méthode map (qui est vrai est un mauvais nom de méthode ...)
Messages postés
16361
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
11 juin 2021
2 842
"avec la dernière version de Eclipse je ne sais pas quelle est la version de Java"
Eclipse c'est juste un éditeur de texte, c'est la version de Java qui compte !

Si tu codes en Java 8, ce que tu as écris juste au dessus se simplifie comme ceci :
public void resetPartielAll() {
    map(v -> v.getCompteur().resetPartiel());
}

D'où l'intérêt de savoir dans quelle version de Java tu codes !
Messages postés
53
Date d'inscription
dimanche 23 mars 2014
Statut
Membre
Dernière intervention
10 mars 2017

Effectivement ça n'a rien à vois l'éditeur et la version de Java ... J'ai regardé je suis en Java 8 et donc ton bout de code marche très bien !

Merci d'avoir pris le temps de m'expliquer :)
Messages postés
16361
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
11 juin 2021
2 842
Du coup tu peux supprimer tes interfaces Map et Function pour utiliser les interfaces standard de Java 8, dans ton cas java.util.function.Consumer conviendrait pour les deux.