繁体   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