Java泛型总结(一)在没有泛型的时候,我们使用ArrayList时对得到的结果要进行强制转换,因为得到的是Object类
Java泛型总结(一)
在没有泛型的时候,我们使用ArrayList时对得到的结果要进行强制转换,因为得到的是Object类型,例如:ArrayList list = new ArrayList();……String str = (String) list.get(0);
在使用了泛型以后:ArrayList<String> list = new ArrayList<String>();……String str = list.get(0);这个地方,编译器通过ArrayList<String>知道了list中存储的是String类型的数据,因此直接返回String了,不用强制进行转换,确保了数据的安全。
简单的自定义泛型类:
public?
class?Pair<T> {????
private?T?first;????
private?T?second;
??? Pair(T first, T second) {????????
this.setFirst(first);????????
this.setSecond(second);??? }
????
public?Pair<T> makePair(T first, T second) {????????
return?
new?Pair<T>(first, second);??? }
????
public?T getFirst() {????????
return?first;??? }
????
public?
void?setFirst(T first) {????????
this.first?= first;??? }
????
public?T getSecond() {????????
return?second;??? }
????
public?
void?setSecond(T second) {????????
this.second?= second;??? }}对于简单的泛型类,使用起来很简单:? ? ? ? String filePath =?"/home/usr";??????? String fileName =?"myfile";??????? Pair<String>?pair?=?
new?Pair(filePath, fileName);
还可以是多个参数的,例如:
class?GenericClass<U, S> {????
private?U?u;????
private?S?s;
????
public?GenericClass<U, S> makePair(U u, S s) {????????
return?
new?GenericClass<U, S>();??? }
????
public?U getU() {????????
return?u;??? }
????
public?S getS() {????????
return?s;??? }}这是简单的泛型类的设计。另外,还有简单的泛型方法,他可以在泛型类中,也可以在普通的类中,例如一个在普通类中的泛型方法:
class?MyClass {????
public?
static?<T>?
void?getFirst(String[] strs) {? ? ? ? ?……??? }}方法的定义时,类型参数(T)放在修饰符(这里是public static)之后,返回类型的前面。
在方法的调用时可以有两种形式:? ? ? ? MyClass.
getFirst(strs);??????? MyClass.<String>?
getFirst(strs);也就是说可以省略掉<String>