Java泛型 - 第一篇

泛型是JDK1.5以后才有的, 可以在编译时期进行类型检查,且可以避免频繁类型转化!

一丶泛型类 / 泛型接口 / 泛型方法

泛型类:   
class 类名<声明自定义泛型>{
}


    1,该泛型 作用域为类  
2,具体数据类型是在使用该类的时候创建对象时候确定的,如果创建对象是没有确定类型,则为Object类型
3,在类上自定泛型,不能作用在静态的方法中,如果静态方法要使用,则要在方法上自己声明
4,在泛型中不能使用基本数据类型。如果使用基本数据类型,那么就使用基本数据类型对应的包装类型。

泛型接口:  

public interface IBaseDao<T>{
    void save(T t );
    void update(T t );
}


 接口上自定义的泛型的具体数据类型是在实现一个接口的时候指定的。

如果我实现一个接口的时候,我目前不知道要操作的数据类型,要在创建接口实现类 对象的时候我才能指定泛型的具体数据类型。

如果要延长接口自定义泛型 的具体数据类型,格式如下:
public class Demo<T> implements IBaseDao<T>{
		
		}


泛型方法: 

public <K,T>T save(T t, K k) {
        return null;
    }


使用泛型方法在使用泛型方法的时候,确定泛型类型  

当方法所属的类中也存在泛型,并且与方法泛型重名,则在方法中以方法的泛型为准

泛型关键字:

?                               指定只是接收值

?关键字:

public void save(List<?> list) {
        // 只能获取、迭代list; 不能编辑list
    }
 List<?> list = new ArrayList<String>();
        //list.add("");// 报错



?关键字可以接受任何泛型集合,但是不能编辑集合值;所以一般在方法参数中用。

在Java中对于参数值是未知类型的容器类,只能读取其中元素,不能向其中修改,添加,删除元素, 因为,其类型是未知,所以编译器无法识别添加元素的类型和容器的类型是否兼容,唯一的例外是NULL。

extends      元素的类型必须继承自指定的类   【上限】

super        元素的类型必须是指定的类的父类    【下限】

什么是上下限?

? super Integer : 只能存储Integer或者是Integer父类元素。  泛型 的下限

? extends lang: 只能存储lang或者是lang类型的子类数据。         泛型上限

//泛型的上限
	public static void getData(List<? extends lang> c){
		
		//<span style="font-family: 'Lantinghei SC', 'Open Sans', Arial, 'Hiragino Sans GB', 'Microsoft YaHei', STHeiti, 'WenQuanYi Micro Hei', SimSun, sans-serif; line-height: 28.7999992370605px; color: rgb(63, 95, 191);">限定元素范围:元素的类型要继承自</span><span style="font-family: 'Lantinghei SC', 'Open Sans', Arial, 'Hiragino Sans GB', 'Microsoft YaHei', STHeiti, 'WenQuanYi Micro Hei', SimSun, sans-serif; line-height: 28.7999992370605px; color: rgb(63, 95, 191);">lang</span><span style="font-family: 'Lantinghei SC', 'Open Sans', Arial, 'Hiragino Sans GB', 'Microsoft YaHei', STHeiti, 'WenQuanYi Micro Hei', SimSun, sans-serif; line-height: 28.7999992370605px; color: rgb(63, 95, 191);">类</span><span style="font-family: 'Lantinghei SC', 'Open Sans', Arial, 'Hiragino Sans GB', 'Microsoft YaHei', STHeiti, 'WenQuanYi Micro Hei', SimSun, sans-serif; line-height: 28.7999992370605px; color: rgb(63, 95, 191);">  【</span><span style="line-height: 28.7999992370605px; color: rgb(63, 95, 191); font-family: 'Lantinghei SC', 'Open Sans', Arial, 'Hiragino Sans GB', 'Microsoft YaHei', STHeiti, 'WenQuanYi Micro Hei', SimSun, sans-serif;">上限</span><span style="line-height: 28.7999992370605px; color: rgb(63, 95, 191); font-family: 'Lantinghei SC', 'Open Sans', Arial, 'Hiragino Sans GB', 'Microsoft YaHei', STHeiti, 'WenQuanYi Micro Hei', SimSun, sans-serif;">】</span><span style="font-family: 'Lantinghei SC', 'Open Sans', Arial, 'Hiragino Sans GB', 'Microsoft YaHei', STHeiti, 'WenQuanYi Micro Hei', SimSun, sans-serif; line-height: 28.7999992370605px; color: rgb(63, 95, 191);">
</span>
	}
	
	//泛型的下限
	public static void set(List<? super Integer> c){
		//<span style="font-family: 'Lantinghei SC', 'Open Sans', Arial, 'Hiragino Sans GB', 'Microsoft YaHei', STHeiti, 'WenQuanYi Micro Hei', SimSun, sans-serif; line-height: 28.7999992370605px; color: rgb(63, 95, 191);">super</span><span style="font-family: 'Lantinghei SC', 'Open Sans', Arial, 'Hiragino Sans GB', 'Microsoft YaHei', STHeiti, 'WenQuanYi Micro Hei', SimSun, sans-serif; line-height: 28.7999992370605px; color: rgb(63, 95, 191);">限定元素范围:必须是</span><span style="font-family: 'Lantinghei SC', 'Open Sans', Arial, 'Hiragino Sans GB', 'Microsoft YaHei', STHeiti, 'WenQuanYi Micro Hei', SimSun, sans-serif; line-height: 28.7999992370605px; color: rgb(63, 95, 191);">Integer的父</span><span style="font-family: 'Lantinghei SC', 'Open Sans', Arial, 'Hiragino Sans GB', 'Microsoft YaHei', STHeiti, 'WenQuanYi Micro Hei', SimSun, sans-serif; line-height: 28.7999992370605px; color: rgb(63, 95, 191);">类</span><span style="font-family: 'Lantinghei SC', 'Open Sans', Arial, 'Hiragino Sans GB', 'Microsoft YaHei', STHeiti, 'WenQuanYi Micro Hei', SimSun, sans-serif; line-height: 28.7999992370605px; color: rgb(63, 95, 191);">   </span><span style="font-family: 'Lantinghei SC', 'Open Sans', Arial, 'Hiragino Sans GB', 'Microsoft YaHei', STHeiti, 'WenQuanYi Micro Hei', SimSun, sans-serif; line-height: 28.7999992370605px; color: rgb(63, 95, 191);">【下限】</span>

	}

泛型写法:

<span style="white-space:pre">	</span>ArrayList<String>  list = new ArrayList<String>();  //true     
  	ArrayList<Object>  list = new ArrayList<String>();  //false
  	ArrayList<String>  list = new ArrayList<Object>();  //false
  	//兼顾新老系统的兼用性
    <span style="white-space:pre">	</span>ArrayList<String>  list = new ArrayList();           //true     
    <span style="white-space:pre">	</span>ArrayList    list = new ArrayList<String>();         //true  




二丶泛型擦除

泛型只在编译时期有效,编译后的字节码文件中不存在有泛型信息!

	public static void main(String[] args) {
		ArrayList<String> string = new ArrayList<String>();
		string.add("adb");
		
		ArrayList<Integer> integer = new ArrayList<Integer>();
		integer.add(123);
		
		System.out.println(string.getClass() == integer.getClass());
	}

我们定义了两个ArraryList 一个为String 类型,只能存储字符串。另一个为Integer只能存放整形;  输出的结果为true  说明说明泛型类型String和Integer都被擦除掉了,只剩下了原始类型


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值