簡體   English   中英

Java - 從Java.lang.Object到自定義類的實例的類型轉換

[英]Java - Typecasting from Java.lang.Object to an instance of a custom Class

有沒有辦法從Java.lang.Object類型轉換為自定義類的實例。

本質上,我已經創建了一個Stack(java.util.Stack),並將其推入了my_class類型的實例。 但是當我從Stack中彈出時,我收到了一個類型為Java.lang.Object的實例。

我是否必須在my_class中創建一個可以從Java.lang.Object創建my_class實例的構造函數?


仿制葯是最好的方法。 我對Java很陌生,並且沒有意識到泛型(與C ++ STL相同),我一直在做很多類似的類型轉換 -

轉換為整數:new Integer((Java.lang.Object).toString())。intValue()

猜猜那些日子已經過去了:)感謝讓我的生活變得輕松。

您應該使用泛型編寫代碼。 例如,而不是

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

您可以像這樣強制轉換對象:

my_class myObj = (my_class)obj;

但是如果你把你的堆棧定義為my_class的堆棧,那么你不需要為了鑄造而煩惱:

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

不,您需要閱讀Java Generics

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

關於公認的答復:

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;

這是一個嚴重的問題嗎?

My_class myClassObj =(My_class)obj;

實際上和我所知道的任何其他語言一樣。 或者我的問題是錯的?

編輯

您當然也可以使用通用堆棧。 只是實際閱讀你的問題的標題;)

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]);

        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM