Java泛型

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

为什么需要泛型

在JDK 1.5前,集合使用Object来存储对象,这会导致集合对元素类型没有任何限制,需要增加强制类型转换

使用

所谓泛型就是在定义类、接口、方法时使用形参。

public interface Map<k,v>
 {Set<K> keyset();
    V put(K key,V val);
 }
从泛型类派生子类
  • 继承泛型类或实现泛型接口时,不能再使用类型形参,可以这样做:
    public class A<T > extends B <T >
    public class A extends B<String> or
    public class A extends B(默认T是object) (!这种情况下的重写的返回类型!!!)
  • 不管传入哪一种类型实参,他们都被java当做同一个类,所以在静态方法、静态初始块和静态变量的声明中不允许使用(类或接口的)类型形参。系统不会真正生成泛型类。
    【数组、集合类型的父子关系】
类型通配符

类型通配符是一个问号(?),将一个问号作为类型实参传给List集合,写作List<? >(意思是元素类型未知的List)
- 类型通配符上限
- list(? extends)
- 类型形参的上限
public class A <T extends Integer >
public class A <T extends Integer & interfaceA >
- 类型参数的下限
<? super T>

泛型方法

修饰符 <T,S> 返回类型 方法名(形参)
static <T> T function(Collection<T extends A> )
- 泛型构造器
- 与类型通配符比较(泛型方法,主要用来表达参数之间的关系,以及返回值与参数之间的关系)
- 泛型方法与方法重载
在一个类中可以同时定义如下两个方法:
public static<T> T COPY(Collection<T> dest,Collection<? extends T> src)
public static<T> void COPY(Collection<? super T> dest,Collection<T> src)
但调用时会报错

Java泛型的原理

http://blog.csdn.net/lonelyroamer/article/details/7868820

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值