Java - 从Java.lang.Object到自定义类的实例的类型转换

Har*_*ari 5 java stack

有没有办法从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()

猜猜那些日子已经过去了:)感谢让我的生活变得轻松.

Ste*_*ker 5

您应该使用泛型编写代码.例如,而不是

MyObject someObj = ...;
Stack myStack = new Stack();
myStack.push(someObj);
someObj = myStack.pop(); // Error!
Run Code Online (Sandbox Code Playgroud)

你可以让堆栈知道对象的类型:

MyObject someObj = ...;
Stack<MyObject> myStack = new Stack<MyObject>();
myStack.push(someObj);
someObj = myStack.pop(); // Now this works!
Run Code Online (Sandbox Code Playgroud)

如果由于某种原因这是不可行的,你可以施放:

MyObject someObj = ...;
Stack myStack = new Stack();
myStack.push(someObj);
someObj = (MyObject) myStack.pop(); // This works too, but is considered very bad style
Run Code Online (Sandbox Code Playgroud)


Jam*_*gne 5

您可以像这样投射对象:

my_class myObj = (my_class)obj;
Run Code Online (Sandbox Code Playgroud)

但是,如果将堆栈定义为的堆栈,my_class则无需费心转换:

Stack<my_class> myStack = new Stack<my_class>();
Run Code Online (Sandbox Code Playgroud)