转载: https://segmentfault.com/a/1190000014120746
1.泛型存在的意义
泛型实际上是参数化类型,将类型明确的工作推迟到调用类或者方法去执行。
2.泛型的必要性:
早期我们是使用Object类,进行代表任意的类型。
但是比如:List,Collection 是没有类型限制,比如: List之前放的是Cat对象,后来又放入的dog对象。获取dog对象我们需要强转。但是引用泛型就不会。
泛型的优势:代码更加简洁【不用强制转换】,程序更加健壮【只要编译时期没有警告,那么运行时期就不会出现ClassCastException异常】
3.泛型定义:
泛型定义在类上,运行到这个类的时候,我们才会确定这个类是什么类型,同理类比方法中的参数。
举例定义在类上:
//T为表示类型,使用到该类的时候再进行确定
public class Fanxing<T> {
public T TContent;
public T getTContent() {
return TContent;
}
public void setTContent(T tContent) {
TContent = tContent;
}
public static void main(String[] args){
Fanxing<String> fanxingSt = new Fanxing<String>();
fanxingSt.setTContent("dd");
//设置user类型
Fanxing<User> fanxingUser = new Fanxing<User>();
fanxingUser.setTContent(new User("dd",25));
}
}
有时候不需要定义在类上,我们只需要定义在某个方法中
举例定义在方法上:方法:getDiferentType
//T为表示类型,使用到该类的时候再进行确定
public class Fanxing<T> {
public T TContent;
public T getTContent() {
return TContent;
}
public void setTContent(T tContent) {
TContent = tContent;
}
/**
* 不管传入什么类型都转为String类型
* @param e
*/
public <T> String getDiferentType(T e){
System.out.println(e.getClass().getName());
String stvalue = String.valueOf(e);
return stvalue;
}
public static void main(String[] args){
//设置String类型
Fanxing<String> fanxingSt = new Fanxing<String>();
fanxingSt.setTContent("dd");
//设置user类型
Fanxing<User> fanxingUser = new Fanxing<User>();
fanxingUser.setTContent(new User("dd",25));
//使用泛型的方法
fanxingUser.getDiferentType(12);
fanxingUser.getDiferentType("ddd");
String floatSt = fanxingUser.getDiferentType(12.2585);
System.out.print(floatSt);
}
}