Typage des variables

KeTZaLDeV Messages postés 35 Date d'inscription mercredi 5 octobre 2005 Statut Membre Dernière intervention 24 octobre 2016 - 26 janv. 2006 à 23:43
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 - 27 janv. 2006 à 21:49
Bonjour, j'ai un problème compliqué. Peut être pourrai-je trouver de l'aide parmis vous.

Je m'explique : je voudrais fabriquer un objet sans avoir à spécifier son type en dur lorque que je tape mon code.

Exemple :
Je tape une classe :

public class toto{
public String bob = new String("bob");
/* type */ socket;
}

est ce que l'on peut utiliser la classe Class pour faire un typage, ou alors on doit forcément le faire en dur.

En fait l'objet que je recois viens d'une Hashtable, il est donc de type Object.
Mon probleme est que je voudrais pouvoir lui appliquer ses méthodes.
Seulement, au moment ou je recois mon objet de ma Hashtable, son type est dynamique(a l'instant i, c'est une socket et a l'instant j c'est une JFrame) en exagérant.

Donc grande question comment typer dynamiquement

j'ai essayé des (object.getClass())object = object; mais ca marche pas...

Donc je suis desespere et je sais pas comment faire

Merci de votre aide

5 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
27 janv. 2006 à 06:53
Si tout tes objets ont des propriétés communes (par exemple : si ca peut être un chien, un chat, un cheval ou une poule, tous peuvent marcher, courir, manger, etc., et ils peuvent être vu comme des animaux), alors je te conseille d'utiliser une interface animal qui sera implémenté par tes quatres classes (chien, chat, etc.), et ainsi, tu pourra facilement appliquer des fonctions sur le type animal et non plus chien, chat, etc. C'est l'approche objet de java au niveau du polymorphysme.

_____________________________________________________________________
0
KeTZaLDeV Messages postés 35 Date d'inscription mercredi 5 octobre 2005 Statut Membre Dernière intervention 24 octobre 2016
27 janv. 2006 à 09:01
Le probleme est que l'objet peut aussi bien etre une socket ou alors une JFrame ou alors un AbstractDocument...



C'est ca le probleme :(



C'est pour ca que je voudrais savoir si on peut faire un typage dynamique.

Merci pour ta reponse :)
0
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
27 janv. 2006 à 11:24
Salut,



tu peux t'aider de l'objet Class et des classes de réflexion (ref:java.lang.reflect.*)

WORA
0
KeTZaLDeV Messages postés 35 Date d'inscription mercredi 5 octobre 2005 Statut Membre Dernière intervention 24 octobre 2016
27 janv. 2006 à 12:50
J'ai deja essayé...

A tu une idée précise de ce qu'il faudrai faire Wora ou alors aucunes?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
27 janv. 2006 à 21:49
Salut,



voici deux exemple différent en esperenant que cela te donne une idée de ce que tu peux faire

(pour la deuxieme methode je ne me sert que des constructeurs par defaut)



import java.lang.reflect.Method;



import javax.swing.JDialog;

import javax.swing.JFrame;



public class Test {



public Test(Object obj){

if(obj instanceof JFrame){

((JFrame)obj).setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

((JFrame)obj).setSize(300,300);

((JFrame)obj).setLocationRelativeTo(null);

((JFrame)obj).setVisible(true);

}else if(obj instanceof JDialog){

((JDialog)obj).setTitle("JDialog 1");

((JDialog)obj).setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);

((JDialog)obj).setSize(300,300);

((JDialog)obj).setLocationRelativeTo(null);

((JDialog)obj).setVisible(true);

}else if(obj instanceof StringBuilder){

((StringBuilder)obj).append("hello");

((StringBuilder)obj).append(" world");

System.out.println((StringBuilder)obj);//implicite

}else{

System.out.println("Il n'y a pas de correspondance");

}



}





public static void main(String[] args) {

JFrame f = new JFrame("Frame 1");

JDialog d = new JDialog();

StringBuilder s = new StringBuilder("");

new Test(f);

new Test(d);

new Test(s);



jframe();

jdialog();

}



private static void jframe(){

try {

//chope la classe

Class c = Class.forName("javax.swing.JFrame");

//creer une instance sur la classe

Object frame = c.newInstance();



//Ajoute un titre

Method m =
frame.getClass().getMethod("setTitle", new Class[]{String.class});

//invocation de la methode avec le petit titre

m.invoke(frame,new Object[]{"JFrame 2"});



//pour fermer la fenetre :)

m =
frame.getClass().getMethod("setDefaultCloseOperation", new
Class[]{int.class});

m.invoke(frame,new Object[]{JFrame.EXIT_ON_CLOSE});



//une petite taille pour le plaisir

m =
frame.getClass().getMethod("setSize", new Class[]{int.class,
int.class});

m.invoke(frame,new Object[]{300,300});



//affiche la fenetre

m =
frame.getClass().getMethod("setVisible", new Class[]{boolean.class});

m.invoke(frame,new Object[]{true});

}catch (Exception e) {

e.printStackTrace();

}

}



private static void jdialog(){

try {

//chope la classe

Class c = Class.forName("javax.swing.JDialog");

//creer une instance sur la classe

Object dialog = c.newInstance();



//Ajoute un titre

Method m =
dialog.getClass().getMethod("setTitle", new Class[]{String.class});

//invocation de la methode avec le petit titre

m.invoke(dialog,new Object[]{"JDialog 2"});



//pour fermer la fenetre :)

m =
dialog.getClass().getMethod("setDefaultCloseOperation", new
Class[]{int.class});

m.invoke(dialog,new Object[]{JDialog.EXIT_ON_CLOSE});



//une petite taille pour le plaisir

m =
dialog.getClass().getMethod("setSize", new Class[]{int.class,
int.class});

m.invoke(dialog,new Object[]{300,300});



//affiche la fenetre

m =
dialog.getClass().getMethod("setVisible", new Class[]{boolean.class});

m.invoke(dialog,new Object[]{true});

}catch (Exception e) {

e.printStackTrace();

}

}



}




WORA
0