Le nom d'une class T d'une class generique!!!!

Signaler
Messages postés
2
Date d'inscription
jeudi 25 décembre 2008
Statut
Membre
Dernière intervention
18 décembre 2011
-
Messages postés
2
Date d'inscription
jeudi 25 décembre 2008
Statut
Membre
Dernière intervention
18 décembre 2011
-
Salut
SVP comment savoir le nom de la class T d'une class generique !!!

par exemple:
class TableModel<T> {
ici comment savoir le nom du la class T( il ya la methode getName()) mais comment la faire
}
et merci de bien me repondre le plus vite possible
A voir également:

2 réponses

Messages postés
5363
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
30 avril 2021
110
Salut,

Je vais faire abstraction du "et merci de bien me repondre le plus vite possible" qui frôle l'irrespect (nous ne sommes que des volontaires qui ne percevons aucun salaire donc les caractères urgent ne sont pas pour nous et nous nous en foutons des urgences des autres).

bref...
Si tu veux juste récupérer le nom tu as accès à getClass():
T t = ...;
Class<?> c = t.getClass();
Après tu peux faire de la réflexion donc récupérer ce qu'il faut pour agir sur l'objet pointé mais ça peut vite devenir looooooooong...

Sinon tu peux utiliser l'héritage dans ta généricité.
Tu peux par exemple passer par une interface pour forcer la présence d'une méthode, exemple (je suis pas inspiré pour les noms dsl):

L'interface:
public interface MyInterface {

public String getName();

}


L'implémentation:
public class MyInterfaceImpl implements MyInterface{

@Override
public String getName() {
return getClass().getName();
}

}


Le type générique:
/* Ici l'héritage multiple est possible voir l'exemple avec MyInterface2*/
public class MyGeneric<T extends MyInterface> {

public void printName(T t) {
System.out.println(t.getName());
}

}


Le test:
public class Test {

public static void main(String[] args) {
MyInterfaceImplmi = new MyInterfaceImpl();
MyGeneric<MyInterfaceImpl> mg = new MyGeneric<MyInterfaceImpl>();
mg.printName(mi);
}

}


Comme dit dans le code de MyGeneric tu peux aussi avoir de l'héritage multiple avec tes interfaces.
En reprenant l'exemple ci-dessous on ajoute le fichier MyInterface2

La nouvelle interface:
public interface MyInterface2 {

public String getPackageName();

}


On change l'a classe d'implémentation de MyInterface comme suit:
public class MyInterfaceImpl implements MyInterface, MyInterface2{

@Override
public String getName() {
return getClass().getName();
}

@Override
public String getPackageName() {
if(getClass().getPackage() == null) return "Not found";
return getClass().getPackage().getName();
}

}


Ensuite la classe MyGeneric en ajoutant la deuxième interface à notre type générique:
public class MyGeneric<T extends MyInterface & MyInterface2> {

public void printName(T t) {
System.out.println(t.getName());
}

public void printPackageName(T t) {
System.out.println(t.getPackageName());
}
}


Pour terminer le code de test:
public class Test {

public static void main(String[] args) {
MyInterfaceImpl mi = new MyInterfaceImpl();
MyGeneric<MyInterfaceImpl> mg = new MyGeneric<MyInterfaceImpl>();
mg.printName(mi);
mg.printPackageName(mi);
}

}




------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
2
Date d'inscription
jeudi 25 décembre 2008
Statut
Membre
Dernière intervention
18 décembre 2011

Merci
mais je veux savoir le nom de la classe dans la classe generique non a une class test !!!!