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

yassiro00 Messages postés 2 Date d'inscription jeudi 25 décembre 2008 Statut Membre Dernière intervention 18 décembre 2011 - 18 déc. 2011 à 14:09
yassiro00 Messages postés 2 Date d'inscription jeudi 25 décembre 2008 Statut Membre Dernière intervention 18 décembre 2011 - 18 déc. 2011 à 20:02
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

2 réponses

Twinuts Messages postés 5374 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 3 mars 2023 111
18 déc. 2011 à 16:54
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
0
yassiro00 Messages postés 2 Date d'inscription jeudi 25 décembre 2008 Statut Membre Dernière intervention 18 décembre 2011
18 déc. 2011 à 20:02
Merci
mais je veux savoir le nom de la classe dans la classe generique non a une class test !!!!
0