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