JAVA范型

JAVA泛型

Reference

Why

不使用范型带来的危害:当我们将一个对象放入集合中,集合不会记住此对象的类型,当再次从集合中取出此对象时,改对象的编译类型变成了Object类型,但其运行时类型任然为其本身类型。取出集合元素时需要人为的强制类型转化到具体的目标类型,且很容易出现“java.lang.ClassCastException”异常。

范型可以提供编译时类型安全监测机制。

What

泛型,即“参数化类型”, 类似于方法中的变量参数。定义方法时有形参,然后调用此方法时传递实参。

  • 泛型只在编译阶段有效.
  • 泛型的类型参数只能是类类型,不能是简单类型。

How

  1. 泛型类:
/*
 * 泛型类
 * Java库中 E表示集合的元素类型,K 和 V分别表示表的关键字与值的类型
 * T(需要时还可以用临近的字母 U 和 S)表示“任意类型”
 */
public class Pair<T> {}
  1. 泛型接口
public interface Generator<T> {}
  1. 泛型方法
    public static <T> T getMiddle(T a) {}
  1. 通配符: 解决当具体类型不确定的时候,这个通配符就是 ? ;当操作类型时,不需要使用类型的具体功能时,只使用Object类中的功能。那么可以用 ? 通配符来表未知类型。
ArrayList heroList<? extends Hero> 
ArrayList heroList<? super Hero>
ArrayList list<?>

实际使用

为了将reader中已有的方法暴露给plugin package使用,引入了sdk package。在sdk package中定义 IPosition interface,采用泛型类,降低reader的修改范围。
Reader:

public interface Element extends IElements<Position> {
	public Position getStartPosition();
}

SDK:

public interface IElement<T extends IPosition> {
	public T getStartPosition();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值