在以下代码中,该方法返回Stack object
,并将其转换为Iterable
。
public Iterable<Integer> getRoute(int x) {
Stack<Integer> stack = new Stack<Integer>();
...
stack.push(x);
return stack;
}
Iterable是一个接口,而不是一个类。能不能让我知道,这个案件的铸造工作如何?
答案 0 :(得分:3)
此处没有实际投射 - 只是从Stack<Integer>
到Iterable<Integer>
的隐式转换,因为Stack<E>
实现了Iterable<E>
(隐式地,通过扩展Vector<E>
, AbstractList<E>
,扩展AbstractCollection<E>
,实现Collection<E>
,扩展Iterable<E>
)。
如果它没有实现接口,则在编译时将禁止隐式转换,并且在执行时显式转换将失败。 Java不使用duck-typing。
答案 1 :(得分:1)
在Java中,无论何时创建对象,都会将其创建为某个类的对象。然后可以将指向此对象的指针存储在同一个Class或该类的SuperClass的任何变量中!
如果您希望从将其存储为超类,将其存储为创建它的同一个类或其较低的超类之一,则使用转换。
一个简单的例子,假设Sub正在扩展Super:
Super super = new Sub();
if (super instanceof Sub)
Sub sub = (Sub) super;