泛型,即参数化类型,使得代码更加的通用。不在局限于某个类或者接口,使得方法更加的松耦合。
2,泛型的目的
泛型的目的之一就是用来指定容器类要持有什么类型的对象,而且由编译器保证类型的正确性。
泛型的核心理念就是告诉编译器你想使用什么类型,然后编译器帮你处理一切细节。
如下的三段代码,完全可以看出使用泛型的优势:
package com.jing.test1;
public class Automobile {
private Automobile a;
/**
* @return the a
*/
public Automobile getA() {
return a;
}
/**
* @param a
* the a to set
*/
public void setA(Automobile a) {
this.a = a;
}
}
public class Automobile {
private Automobile a;
/**
* @return the a
*/
public Automobile getA() {
return a;
}
/**
* @param a
* the a to set
*/
public void setA(Automobile a) {
this.a = a;
}
}
package
com.jing.test1;
public
class Holder2 {
private Object a;
/**
* @return the a
*/
public Object getA() {
return a;
}
/**
* @param a
* the a to set
*/
public void setA(Object a) {
this.a = a;
}
public static void main(String[] args) {
Holder2 h2 = new Holder2();
h2.setA( new Automobile());
}
}
private Object a;
/**
* @return the a
*/
public Object getA() {
return a;
}
/**
* @param a
* the a to set
*/
public void setA(Object a) {
this.a = a;
}
public static void main(String[] args) {
Holder2 h2 = new Holder2();
h2.setA( new Automobile());
}
}
package com.jing.test1;
public class Holder3 <T > {
private T a;
/**
* @return the a
*/
public T getA() {
return a;
}
/**
* @param a
* the a to set
*/
public void setA(T a) {
this.a = a;
}
public static void main(String[] args) {
Holder3 <Automobile > h3 = new Holder3 <Automobile >();
h3.setA( new Automobile());
}
}
3,元组:
元组(tuple),将一组对象直接打包存储于某单衣对象中。
package
com.jing.test2;
/**
*
* @ClassName: TwoTuple
* @Description: 当前元组对象持有两个对象
* @author JerryJing
* @date 2014年5月18日 下午2:59:35
* @version V1.0
* @param <A>
* @param <B>
*/
public class TwoTuple <A, B > {
public final A first; //申明为final,实现安全性
public final B second;
/**
*
* <p>
* Title:TwoTuple.java
* </p>
* <p>
* Description: 构造函数
* </p>
*
* @param first
* @param second
*/
public TwoTuple(A first, B second) {
super();
this.first = first;
this.second = second;
}
/**
* toString
*/
@Override
public String toString() {
return "TwoTuple [first=" + first + ", second=" + second + "]";
}
}
*
* @ClassName: TwoTuple
* @Description: 当前元组对象持有两个对象
* @author JerryJing
* @date 2014年5月18日 下午2:59:35
* @version V1.0
* @param <A>
* @param <B>
*/
public class TwoTuple <A, B > {
public final A first; //申明为final,实现安全性
public final B second;
/**
*
* <p>
* Title:TwoTuple.java
* </p>
* <p>
* Description: 构造函数
* </p>
*
* @param first
* @param second
*/
public TwoTuple(A first, B second) {
super();
this.first = first;
this.second = second;
}
/**
* toString
*/
@Override
public String toString() {
return "TwoTuple [first=" + first + ", second=" + second + "]";
}
}