Java约定俗成怎么定义_<java泛型>java泛型Generics

what

泛型:一般类型,也就是说可以为任何类型.

泛型的本质是“参数化类型”,也就是说: 所操作的数据类型 被指定为一个参数, 传输。泛型是在JDK1.5中引入的特性。

why

泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型,而不是在运行时才出现错误。

使用泛型有以下好处:

编译时强类型检查

无需手动进行类型转换

可以实现复用,编写通用算法

how

泛型类

ArrayList

public class Tool {

private E e;

public Tool(E e1){

this.e = e1;

}

public E getE() {

return e;

}

public void setE(E e) {

this.e = e;

}

}

泛型方法

1)使用泛型类定义参数类型(常用)

如泛型类Tool,它的泛型参数即为AA。那么泛型方法可以这样写:

public class Tool{

public void show(AA aa){

}

}

2)自定义的参数类型

public void show(AA aa){

}

注:静态方法不能访问类的泛型,如果需要泛型,我们只能使用方法2(自定义的参数类型)

泛型接口

假设有泛型接口interf,它的实现类是Tool。

1)确定实现的泛型接口的参数类型:

假设Tool类需要String类型的参数,那么实现可以直接写:

class Tool implements interf{

}

2)不确定实现的泛型接口的参数类型:

我们需要泛型类来实现

class Tool implements interf{

}

当泛型类和泛型方法一起出现的时候

泛型T  被实现类所指定的泛型类型替换,而参数e是由调用者决定的

public interface Test {

T aaa(E e, T t);

}

public class Demo implements Test {

@Override

public Integer aaa(E e, Integer t) {

return null;

}

}

当然返回类型也可更改为E

public interface Test {

E aaa(E e, T t);

}

public class Demo implements Test {

@Override

public E aaa(E e, Integer t) {

return null;

}

}

泛型通配符:?

当我们不确定传入的对象类型时我们就可以使用?来代替。“?”即泛型通配符。

泛型的限定

书写格式:

上限: 表示参数类型是  E或其所有子类。

下限: super E>  表示参数类型是 E或其所有超类(即父类)。

约定俗成的定义

? 表示不确定的java类型。

T 表示java类型。

K, V 分别代表java键值中的Key Value。

E 代表Element。

泛型的擦除

一句话总结就是:在.java文件运用泛型技术时,编译器在文件编译通过后自动擦除泛型标识。

泛型的补偿

编译器在擦除泛型后,会自动将类型转换为原定义的"泛型",这样就不必再做向下类型转换了。 泛型的擦除和补偿 这两个机制都是编译器内部自动完成的,了解其原理即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值