【发布时间】:2014-05-03 03:25:01
【问题描述】:
我偶然发现了一个涉及我不理解的泛型和接口的 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(如预期的那样)。而且使用两个类而不是接口确实会产生编译错误。
【问题讨论】:
标签: java generics interface casting