Java基础--泛型

泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

package test.fanxing;

public class GenericTest {

	/**
	 *  泛型:
		1:JDK1.5以后引入了"参数化类型"的概念,允许程序在创建集合是指定集合元素的类型。用来约束集合保存数据统一性,Java的参数化类型被称为泛型。
		2:JDK1.7出现了“菱形”写法。在定义的过程中不用指明运行时的数据类型。简化了定义.
		3:所谓泛型,就是允许在定义类,接口,方法时使用类型形参,这个类型形参将在声明变量,创建对象,调用方法时动态的指明,(即传入实际的类型参数,也可称为类型实参)。
		JDK1.5改写了集合框架中的全部接口和类,为这些接口,类增加了泛型支持。从而在声明集合变量,创建集合对象时传入类型实参。----模板
		4:从泛型类中派生子类,当创建了带泛型声明的接口,父类之后,可以为该接口创建实现类,或从该父类派生子类。
		public Children  extend Father<T>
		5:不能在静态成员上使用泛型类型。
		6:泛型中的数据类型不能是基础数据类型,一定封装数据类型(类)
	 */
	
	public static void main(String[] args) {
		Box<String> box = new Box<>("fyl");
		Box<Integer> box2 = new Box<>(12);
		
		System.out.println(box.getData());
		System.out.println(box2.getData());
		System.out.println(box.getClass()==box2.getClass());
		
		
		Box<Number> id = new Box<Number>(99);
		Box<Integer> age = new Box<Integer>(712);
		Box<String> name = new Box<>("ffffff");
		Box.getData1(id);
//		Box.getData1(age); //编译错误,Box<Number>在逻辑上不能视为Box<Integer>的父类
		/**
		 * 类型通配符一般是使用 ? 代替具体的类型实参。注意了,此处是类型实参,而不是类型形参!且Box<?>在逻辑上是Box<Integer>、Box<Number>...等所有Box<具体类型实参>的父类
		 */
		System.out.println("------------------------");
		Box.getData2(name);
		Box.getData2(age);
		Box.getData2(id);
	}
	
}

class Box<T>{
	private T data;
	
	 public Box() {
		 
	} 		
	 
	 public Box(T data) {
		this.data = data;	
	}
	 
	 public T getData() {
		return data;
	}
	 
	 public static void getData1(Box<Number> data){
         System.out.println("data :" + data.getData());
     }
	 
	 public static void getData2(Box<?> data){
         System.out.println("data :" + data.getData());
     }

}
结果:

fyl
12
true
data :99
------------------------
data :ffffff
data :712
data :99



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值