2012-02-09 9 views
2

Java.lang.Objectからカスタム定義されたクラスのインスタンスへの型キャスト方法はありますか?Java - Java.lang.Objectからカスタムクラスのインスタンスへの型キャスト

私はStack(java.util.Stack)を作成し、それをmy_class型のインスタンスにプッシュしました。しかし、スタックからポップアウトすると、Java.lang.Object型のインスタンスが返されます。

Java.lang.Objectからmy_classインスタンスを作成できるmy_classにコンストラクタを作成する必要がありますか?


ジェネリックは行くための最良の方法です。私はJavaにはまだまだ慣れていないし、ジェネリック(C++ STLと同じ)を実現することなく、私はたくさんの型キャストをしています -

整数に変換する:new Integer((Java.lang.Object) .toString())。intValue()

これらの日は今になったと思います:)私の人生を楽にしてくれてありがとう。

答えて

5

ジェネリックを使用してコードを書く必要があります。あなたはスタック内のオブジェクトの種類を知らせることができますたとえば、代わりの

MyObject someObj = ...; 
Stack myStack = new Stack(); 
myStack.push(someObj); 
someObj = myStack.pop(); // Error! 

:これは現実的ではない何らかの理由場合

MyObject someObj = ...; 
Stack<MyObject> myStack = new Stack<MyObject>(); 
myStack.push(someObj); 
someObj = myStack.pop(); // Now this works! 

、あなたはキャストすることができます:

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

いいえ、あなたにお読みくださいJava Generics

java.util.Stack<myObject> myStack = new java.util.Stack<myObject>(); 
+0

私はジェネリックについて同意しますが、質問に対する答えはノーではありません。 –

+1

新しいコードを書いているなら、そうです。文字通り 'Object'との間でやりとりする理由はなく、現代のJavaでは悪い習慣とみなされます。 (実際には彼の質問ではありませんでした。答えは間違いなく「いいえ」と答えた唯一の疑問符です。) –

3

あなたはこのようにオブジェクトをキャストすることができます

my_class myObj = (my_class)obj; 

しかし、あなたはmy_classのスタックとして、あなたのスタックを定義するならば、あなたはキャストを気にする必要はありません。

Stack<my_class> myStack = new Stack<my_class>(); 
0

これは深刻です質問?

My_class myClassObj =(My_class)obj;

実際に私が知っている他の言語でも同様です。 質問が間違っていますか?

編集

あなたはもちろん、一般的なスタックを使用することができます。 ただ、実際にあなたの質問のタイトルを読んで、受け入れ応答に関連して)

0

を:

MyObject someObj = ...; Stack myStack = new Stack(); myStack.push(someObj); someObj = (MyObject) myStack.pop();

述べたように、はい、someObj = (MyObject) myStack.pop();が最も安全ではありません。しかし、あなたはまだオブジェクトをキャストするために探しているなら、instanceof

EX使用:

Object obj = myStack.pop(); MyObject someObj = null; if(obj instanceof MyObject) someObj = (MyObject) obj;

-1
qlist=dao.getdistinctquestion(); 
      System.out.println(qlist); 
      List<QuestionMaster> alist = new ArrayList<QuestionMaster>(); 
      int i=1, c=0; String sub=""; 
      for(QuestionMaster qq:qlist){ 
       System.out.println("element:"+qq.getSubject()); 
       if(i==1){ 
        c=1; // sub = qq.getSubject(); 
       } 
       else 
       if (qq.getSubject().equals(sub)==false){ 
        QuestionMaster ss = new QuestionMaster(); 
        ss.setSubject(sub); 
        ss.setTag(""+c); 
        alist.add(ss); 
        c=1; 
       } 
       else 
        c++; 
       sub=qq.getSubject(); 
       i++; 
      } 
      QuestionMaster ss = new QuestionMaster(); 
       ss.setSubject(sub); 
       ss.setTag(""+c); 
       alist.add(ss); 


      qlist=alist; 

を================= ========================================== ===

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

     } 
+0

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

+0

この回答はどのように役立ちますか? –