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