Quo*_*ota 20 java generics casting interface
我偶然发现了一个涉及泛型和接口的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 {
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么第二个演员阵容没有编译器错误get(0)?
两个附注:执行该类会抛出一个ClassCastException(如预期的那样).使用两个类而不是接口确实会产生编译错误.
Fla*_*vio 29
此行为与泛型无关:您可以将任何接口转换为任何其他接口而不会出现编译错误.
您无法对类执行此操作,因为Java可以在编译时检查是否可以将一个类转换为另一个类.
但是使用接口,强制转换可能成功或失败,具体取决于实际实现接口的类.这只能在运行时发现.
| 归档时间: |
|
| 查看次数: |
2645 次 |
| 最近记录: |