我偶然发现了一个涉及Java泛型和接口的强制类型转换问题,但我并不理解。
请看下面的代码,我创建了一个List<Interface1>
,然后使用get()
方法获取一个元素,并将其强制转换为Interface2
,尽管这两个接口完全没有关系,却没有编译错误。
import java.util.*;
public class Main {
public static void main(String ... args) {
List<Interface1> list = new ArrayList<>();
list.add(new Interface1() {});
Interface1 ok = list.get(0);
Interface2 why = (Interface2)list.get(0);
}
}
interface Interface1 {
}
interface Interface2 {
}
有人可以解释一下为什么第二个get(0)
的强制转换没有编译错误吗?
顺便说一下:执行该类会抛出ClassCastException
异常(如预期所示)。而使用两个类而不是接口实际上会产生编译错误。
Interface1
和Interface2
是两个不同的接口。 - Michael Kazarian