[英]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.