您的位置:首页 > 编程语言 > Java开发

java泛型应用实例 - 自定义泛型类,方法

2014-03-24 12:42 627 查看
一、泛型类

泛型类,就是简化版的 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#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: