将堆栈转换为Iterable

时间:2013-11-25 17:04:39

标签: java casting iterable

在以下代码中,该方法返回Stack object,并将其转换为Iterable

public Iterable<Integer> getRoute(int x) {
    Stack<Integer> stack = new Stack<Integer>();
    ...
    stack.push(x);
    return stack;
}

Iterable是一个接口,而不是一个类。能不能让我知道,这个案件的铸造工作如何?

2 个答案:

答案 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;