java - 关于擦除的疑问,下面两个程序,为什么一个会擦除,一个不会擦除?
高洛峰
高洛峰 2017-04-17 17:22:57
0
1
248
  1. 第一个程序验证了擦除;那照理说,第二个也应该擦除,课为什么会有 compile error : incompatible types
    错误了?

import java.util.*; public class ErasedTypeEquivalence { public static void main(String[] args) { Class c1 = new ArrayList().getClass(); Class c2 = new ArrayList().getClass(); System.out.println(c1 == c2); } }

第二个程序:

import java.util.*; class Fruit { } class Apple extends Fruit { } public class NonCovariantGenerics { // Compile Error: incompatible types: List flist = new ArrayList(); }
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

모든 응답 (1)
PHPzhong

两个都会擦出,只不过第二个在擦除前就报错了。

擦除是在编译后才擦除的,即泛型信息在运行期不可见,所以第一个例子会输出true。
而你的第二个例子报的错是编译期的错误。泛型信息正是在编译期给编译器看的。

    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿
    회사 소개 부인 성명 Sitemap
    PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!