Java 泛型接口转换
我偶然发现了一个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