Tips:
1
把ArrayList当做“可以自动扩充自身尺寸的数组”
(下面有反例- -)
2注解
@开头,可以接收参数
例如:@SuppressWarnings(“unchecked”)
表示:只有有关“不受检查的异常”的警告信息应该被抑制
class Apple {
private static long counter;
private final long id = counter++;
public long id() {
return id;
}
}
class Orange {
}
public class ApplesAndOrangesWithoutGenerics {
//注解在这里
//如果不写会给一个警告:ApplesAndOrangesWithoutGenerics.java使用了未经检查或不安全的操作,但仍可以编译通过
@SuppressWarnings("unchecked")
public static void main(String[] args) {
ArrayList apples = new ArrayList();
for (int i = 0; i < 3; i++)
apples.add(new Apple());//不加元素的话,不给警告
apples.add(new Orange());
for (int i = 0; i < apples.size(); i++)
((Apple) apples.get(i)).id();//运行时这句会报异常:ClassCastException(RuntimeException)
// Orange is detected only at run time//RTTI
//如果使用泛型,加入Orange元素就无法通过编译(提示“找不到合适的方法”,是逻辑错误,不是异常);这里不使用泛型,到运行时才报异常
}
}