java泛型介绍

class Point<T>{//此处可以随便写标识符号,T是type的简称
	private T var;//var的类型由T指定,即:由外部指定
	public T getVar(){//返回值的类型由外部决定
		return var;
	}
	public void setVar(T var){//设置的类型也由外部决定
		this.var = var;
	}
};
public class GenericsDemo06{
	public static void main(String args[]){
		Point<String> p = new Point<String>();//里面的var类型为String类型
		p.setVar("it");//设置字符串
		System.out.println(p.getVar().length());//取得字符串的长度
	}
};
----------------------------------------------------------
class Notepad<K,V>{// 此处指定了两个泛型类型
	private K key;// 此变量的类型由外部决定
	private V value;//此变量的类型由外部决定
	public K getKey(){
		return this.key ;
	}
	public V getValue(){
		return this.value ;
	}
	public void setKey(K key){
		this.key = key ;
	}
	public void setValue(V value){
		this.value = value ;
	}
};
public class GenericsDemo09{
	public static void main(String args[]){
		Notepad<String,Integer> t = null;//定义两个泛型类型的对象
		t = new Notepad<String,Integer>();//里面的key为String,value为Integer
		t.setKey("汤姆";	// 设置第一个内容
		t.setValue(20);// 设置第二个内容
		System.out.print("姓名;" + t.getKey());// 取得信息
		System.out.print(",年龄;" + t.getValue());// 取得信息
	}
};

 

class Info<T> {
	private T var;//定义泛型变量

	public void setVar(T var) {
		this.var = var;
	}

	public T getVar() {
		return this.var;
	}

	public String toString() {//直接打印
		return this.var.toString();
	}
};

public class GenericsDemo14 {
	public static void main(String args[]) {
		Info<String> i = new Info<String>();//使用String为泛型类型
		i.setVar("it");//设置内容
		fun(i);
	}

	public static void fun(Info<?> temp) {//可以接收任意的泛型对象
		System.out.println("内容:" + temp);
	}
};

  

class Info<T>{
	private T var;//定义泛型变量
	public void setVar(T var){
		this.var = var ;
	}
	public T getVar(){
		return this.var ;
	}
	public String toString(){//直接打印
		return this.var.toString() ;
	}
};
public class GenericsDemo17{
	public static void main(String args[]){
		Info<Integer> i1 = new Info<Integer>();//声明Integer的泛型对象
		Info<Float> i2 = new Info<Float>();//声明Float的泛型对象
		i1.setVar(30);// 设置整数,自动装箱
		i2.setVar(30.1f);//设置小数,自动装箱
		fun(i1) ;
		fun(i2) ;
	}
//只能接收Number及其Number的子类
	public static void fun(Info<? extends Number> temp){	
System.out.print(temp);
	}
};
----------------------------------------------------------
class Info<T>{
	private T var ; // 定义泛型变量
	public void setVar(T var){
		this.var = var ;
	}
	public T getVar(){
		return this.var ;
	}
	public String toString(){//直接打印
		return this.var.toString() ;
	}
};
public class GenericsDemo21{
	public static void main(String args[]){
		Info<String> i1 = new Info<String>();// 声明String的泛型对象
		Info<Object> i2 = new Info<Object>();// 声明Object的泛型对象
		i1.setVar("hello") ;
		i2.setVar(new Object()) ;
		fun(i1) ;
		fun(i2) ;
	}
    //只能接收String或Object类型的泛型
	public static void fun(Info<? super String> temp){
		System.out.print(temp) ;
	}
};

 

 

class Info<T> {
	private T var;//定义泛型变量

	public void setVar(T var) {
		this.var = var;
	}

	public T getVar() {
		return this.var;
	}

	public String toString() {//直接打印
		return this.var.toString();
	}
};

public class GenericsDemo23 {
	public static void main(String args[]) {
		Info<String> i1 = new Info<String>();//泛型类型为String
		Info<Object> i2 = null;
		i2 = i1;//这句会出错 incompatible types
	}
};

 

 

interface Info<T>{//在接口上定义泛型
	public T getVar();//定义抽象方法,抽象方法的返回值就是泛型类型
}
class InfoImpl<T> implements Info<T>{//定义泛型接口的子类
	private T var;//定义属性
	public InfoImpl(T var){//通过构造方法设置属性内容
		this.setVar(var) ;	
	}
	public void setVar(T var){
		this.var = var ;
	}
	public T getVar(){
		return this.var ;
	}
};
public class GenericsDemo24{
	public static void main(String arsg[]){
		Info<String> i = null;// 声明接口对象
		i = new InfoImpl<String>("汤姆");//通过子类实例化对象
		System.out.println("内容:"+ i.getVar()) ;
	}
};
----------------------------------------------------------
interface Info<T>{//在接口上定义泛型
	public T getVar();//定义抽象方法,抽象方法的返回值就是泛型类型
}
class InfoImpl implements Info<String>{//定义泛型接口的子类
	private String var;//定义属性
	public InfoImpl(String var){//通过构造方法设置属性内容
		this.setVar(var) ;	
	}
	public void setVar(String var){
		this.var = var ;
	}
	public String getVar(){
		return this.var ;
	}
};
public class GenericsDemo25{
	public static void main(String arsg[]){
		Info i = null; //声明接口对象
		i = new InfoImpl("汤姆");//通过子类实例化对象
		System.out.println("内容:"+ i.getVar()) ;
	}
};

 

 

class Demo {
	public <T> T fun(T t) {//可以接收任意类型的数据
		return t;//直接把参数返回
	}
};

public class GenericsDemo26 {
	public static void main(String args[]) {
		Demo d = new Demo();//实例化Demo对象
		String str = d.fun("汤姆");//传递字符串
		int i = d.fun(30);//传递数字,自动装箱
		System.out.println(str);//输出内容
		System.out.println(i);//输出内容
	}
};

 

 

class Info<T extends Number> {//指定上限,只能是数字类型
	private T var;//此类型由外部决定

	public T getVar() {
		return this.var;
	}

	public void setVar(T var) {
		this.var = var;
	}

	public String toString() {//覆写Object类中的toString()方法
		return this.var.toString();
	}
};

public class GenericsDemo27 {
	public static void main(String args[]) {
		Info<Integer> i = fun(30);
		System.out.println(i.getVar());
	}
    //方法中传入或返回的泛型类型由调用方法时所设置的参数类型决定
	public static <T extends Number> Info<T> fun(T param) {		
Info<T> temp = new Info<T>();//根据传入的数据类型实例化Info
		temp.setVar(param);//将传递的内容设置到Info对象的var属性之中
		return temp;//返回实例化对象
	}
};

 

 

class Info<T> {//指定上限,只能是数字类型
	private T var;//此类型由外部决定

	public T getVar() {
		return this.var;
	}

	public void setVar(T var) {
		this.var = var;
	}

	public String toString() {//覆写Object类中的toString()方法
		return this.var.toString();
	}
};

public class GenericsDemo28 {
	public static void main(String args[]) {
		Info<String> i1 = new Info<String>();
		Info<String> i2 = new Info<String>();
		i1.setVar("HELLO");//设置内容
		i2.setVar("汤姆");//设置内容
		add(i1, i2);
	}

	public static <T> void add(Info<T> i1, Info<T> i2) {
		System.out.println(i1.getVar() + " " + i2.getVar());
	}
};

 

 

public class GenericsDemo30 {
	public static void main(String args[]) {
		Integer i[] = fun1(1, 2, 3, 4, 5, 6);//返回泛型数组
		fun2(i);
	}

	public static <T> T[] fun1(T... arg) {//接收可变参数
		return arg;//返回泛型数组
	}

	public static <T> void fun2(T param[]) {//输出
		System.out.print("接收泛型数组:");
		for (T t : param) {
			System.out.print(t + "、");
		}
	}
};

 

 

class Info<T, V> {//接收两个泛型类型
	private T var;
	private V value;

	public Info(T var, V value) {
		this.setVar(var);
		this.setValue(value);
	}

	public void setVar(T var) {
		this.var = var;
	}

	public void setValue(V value) {
		this.value = value;
	}

	public T getVar() {
		return this.var;
	}

	public V getValue() {
		return this.value;
	}
};

class Demo<S> {
	private S info;

	public Demo(S info) {
		this.setInfo(info);
	}

	public void setInfo(S info) {
		this.info = info;
	}

	public S getInfo() {
		return this.info;
	}
};

public class GenericsDemo31 {
	public static void main(String args[]) {
		Demo<Info<String, Integer>> d = null;//将Info作为Demo的泛型类型
		Info<String, Integer> i = null;//Info指定两个泛型类型
		i = new Info<String, Integer>("汤姆", 30);//实例化Info对象
		d = new Demo<Info<String, Integer>>(i);//在Demo类中设置Info类的对象
		System.out.println("内容一:" + d.getInfo().getVar());
		System.out.println("内容二:" + d.getInfo().getValue());
	}
};

 

本文出自:http://www.cnblogs.com/sunwei2012/archive/2010/10/08/1845938.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值