一、泛型类
泛型类,就是简化版的 extends 和 overwrite ,就是子类继承父类之后,进行改写方法。
泛型类实例说明:
车和房子都有品牌,名字和价钱,都是商品或者货物这种数据结构,一般需要获取品牌,名字和价钱的描述信息. 我就将货物定义为泛型类,获取描述信息就是泛型类里面的通用方法.
实例代码:
CarBean.java
package Generics_1;
public class CarBean {
private String brand;
private String name;
private String price;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
}
HouseBean.java
package Generics_1;
public class HouseBean {
private String brand;
private String name;
private String price;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
}
GenericGoods.java
package Generics_1;
public class GenericGoods<T> {
private T t;
private String information;
public GenericGoods(T t){
this.t=t;
}
public void setData(String sBrand, String sName, String sPrice)
{
this .information = "This " + sName + " of " + sBrand + " costs "
+ sPrice + "!" ;
}
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
public String getInformation() {
return information;
}
public void setInformation(String information) {
this.information = information;
}
public String getClassType()
{
return t.getClass().getName();
}
}
Test_1.java
package Generics_1;
public class Test_1 {
public static void main(String[] args) {
GenericGoods<CarBean> car = new GenericGoods<CarBean>(new CarBean());
car.setData("X", "宝马", "600");
System.out.println(car.getClass());
System.out.println(car.getInformation());
System.out.println("=========");
GenericGoods<HouseBean> house = new GenericGoods<HouseBean>(new HouseBean());
house.setData("H", "故宫", "1000");
System.out.println(house.getClass());
System.out.println(house.getInformation());
}
}
输出结果:
class Generics_1.GenericGoods
This 宝马 of X costs 600!
=========
class Generics_1.GenericGoods
This 故宫 of H costs 1000!
二、泛型方法
说明:
这个GenericMethodProcess类不是泛型类, 在其中定义了定义了我们泛型方法toString, 它的功能就是按照指定的格式将Bean转换成String
GenericMethodProcess.java
package Generics_1;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class GenericMethodProcess {
// 泛型方法,就可以将所有的Bean按照指定格式转换成字符串, 就可以避免每个Bean都要实现toString方法.
public <T>String toString(T oT) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
String sRet = "";
String sGetMethodName = "";
String sFieldName = "";
Method oMethod;
Field[] oFields = oT.getClass().getDeclaredFields(); // 类中全部字段集合
if ( null != oFields){ // 该类中有字段
for (int i = 0; i < oFields.length; i++){ //逐一获取一个字段
oFields[i].setAccessible(true); // 设置 类中的private字段,可以访问
sFieldName = oFields[i].getName();
if (sFieldName.length() > 1){ //若该字段 大于 1 ,获取 get方法 名称 (处理)
sGetMethodName = "get"
+sFieldName.substring(0, 1).toUpperCase() //首字母大写
+sFieldName.subSequence(1, sFieldName.length()); //其余小写
}else{
sGetMethodName = "get" + sFieldName.toUpperCase(); //单字母,直接大写
}
oMethod = oT.getClass().getMethod(sGetMethodName); // 获取get方法
sRet = sRet + sFieldName + "=" + oMethod.invoke(oT) + ";" ;
}
}
//移除最后一个“ ; ”
if(! "".equals(sRet)){
sRet = sRet.substring(0,sRet.length() -1);
}
return sRet;
}
}
Test_2.java
package Generics_1;
import java.lang.reflect.InvocationTargetException;
public class Test_2 {
public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
GenericMethodProcess oGMP = new GenericMethodProcess();
CarBean oCarBean = new CarBean();
oCarBean.setBrand("X");
oCarBean.setName("宝马");
oCarBean.setPrice("100");
String sBeanStr = oGMP.toString(oCarBean);
System.out.println("CarBean toString:"+sBeanStr);
HouseBean oHouseBean = new HouseBean();
oHouseBean.setBrand("Y");
oHouseBean.setName("奔驰");
oHouseBean.setPrice("200");
sBeanStr = oGMP.toString(oHouseBean);
System.out.println("houseBean toString:"+sBeanStr);
}
}
输出结果:
CarBean toString:brand=X;name=宝马;price=100
HouseBean toString:brand=Y;name=奔驰;price=200
转载:http://blog.csdn.net/hejiangtao/article/details/7173822#