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

一、泛型类


泛型类,就是简化版的 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#

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值