第四章节
23)请不要在新代码中使用原生态类型
如果使用原生态类型,就失去了泛型在安全性和表述性方面的所有优势
ArrayList i = new ArrayList()
这样写的目的是为了支持jdk5以前的代码。
24)消除非受检警告
尽可能消除每一非受检警告。
如果无法消除警告,同时可以证明引起警告的代码是类型安全的,可以用一个
@SuppressWarnings("unchecked")
来消除警告。并且,始终在尽可能小的范围中使用这条注解。
public static <T> T[] getItem(int Max) {
@SuppressWarnings("unchecked") T[] result = (T[]) new Object[Max];
return result;
}
25)列表优先于数组
利用列表我们可以在编译时发现问题
Object[] object = new Long[1];
object[0] = "Insert"
这一段代码是合法的。
List<Object> ol = new ArrayList<Long>();
ol.add("Insert");
这一段代码是不合法的。
利用列表可能会损失性能和简洁性,但是换回的却是更高的类型安全性和互用性。
而我们在处理并发的时候,列表更加安全。
26)优先考虑泛型
使用泛型比使用需要在客户端代码中进行装换的类型来得更加安全。
我们来实现一个不考虑泛型的代码
//com.insanus.Generic.java
package com.insanus;
public class Generic {
private Object[] elements;
private final static int MAX = 10000;
private int size = 0;
public Generic() {
elements = new Object[MAX];
}
public void push(Object i) {
elements[size] = i;
size ++;
}
public Object pop() {
if (size == 0)
return null;
Object out = elements[size - 1];
elements[size] = null;
return out;
}
}
而我们在处理的时候要进行类型转换,这很不安全,所以我们改写这份代码,加入泛型。
//com.insanus.Generic.java
package com.insanus;
public class Generic<T> {
private T[] elements;
private final static int MAX = 10000;
private int size = 0;
@SuppressWarnings("unchecked") public Generic() {
elements = (T[])new Object[MAX];
}
public void push(T i) {
elements[size] = i;
size ++;
}
public T pop() {
if (size == 0)
return null;
T out = elements[size - 1];
elements[size] = null;
return out;
}
}