6
votes

Java - Typecasting de java.lang.Object à une instance d'une classe personnalisée

Y a-t-il un moyen de typecast de java.lang.Object à une instance d'une classe définie personnalisée.

Essentiellement, j'ai créé une pile (java.util.stack) et j'ai poussé dans les instances de type my_class. Mais quand je sors de la pile, je reçois une instance de type java.lang.Object.

Dois-je créer un constructeur dans my_class qui peut créer mes instances_class à partir de java.lang.Object?


génériques est le meilleur moyen d'y aller. Je suis joliment nouveau à Java et sans me rendre compte des génériques (identiques à C ++ STL), je faisais beaucoup de typé de forme -

se convertir en un entier: neuf entier ((java.lang.Object) .Tostring ()). Intvalue ()

Devinez que ces jours sont partis maintenant :) Merci de rendre ma vie facile.


0 commentaires

6 Réponses :


5
votes

Vous devez écrire du code en utilisant des génériques. Par exemple, au lieu de

MyObject someObj = ...;
Stack myStack = new Stack();
myStack.push(someObj);
someObj = (MyObject) myStack.pop(); // This works too, but is considered very bad style


0 commentaires

1
votes

Non, vous devez vous relire sur Java Generics xxx


2 commentaires

Je suis d'accord sur les génériques, mais la réponse à la question n'est pas non.


Si vous écrivez un nouveau code, alors oui, c'est. Il n'y a littéralement aucune raison de lancer et de partir de objet et il est considéré comme une mauvaise pratique avec Java moderne. (Et d'ailleurs, ce n'était pas réellement sa question - la seule question de point que je vois est après quelque chose que la réponse est définitivement "non" :))



6
votes

Vous pouvez lancer l'objet comme celui-ci: xxx

mais si vous définissez votre pile en tant que pile de my_class alors vous n'avez pas besoin de vous embêter avec le casting : xxx


0 commentaires

0
votes

est-ce une question sérieuse?

my_class myClassobj = (my_class) obj;

En fait comme dans une autre langue que je sache. Ou est-ce que je fais mal à votre question?

Modifier

Vous pouvez bien sûr utiliser également une pile générique. Il suffit de lire le titre de votre question en réalité;)


0 commentaires

0
votes

En référence à la réponse acceptée:

" myObject TOOOBJ = ...;; Pile mystack = nouvelle pile (); mystack.push (ToObJ); someobj = (myObject) mystack.pop (); "

Comme indiqué, oui, someobj = (myObject) mystack.pop (); n'est pas le plus sûr. Cependant, si vous souhaitez toujours lancer un objet, utilisez l'instance

ex:

objet obj = mystack.pop (); MyObject TOOOBJ = NULL; Si (l'instance OBJ de MyObject) Someobj = (myObject) obj;


0 commentaires

-1
votes
for(Object im:list){
            Object[] a=(Object[]) im;
            System.out.println("subject ="+a[0]+"total questions ="+a[1]);

        }

2 commentaires

pour (objet IM: liste) {objet [] A = (objet []) im; System.out.println ("sujet =" + a [0] + "Questions totales =" + A [1]); }


Comment cette réponse aide-t-elle quelqu'un?