JAVA范型

JAVA泛型

Reference

Why

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

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

What

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

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

How

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

实际使用

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

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

SDK:

public interface IElement {
	public T getStartPosition();
}

你可能感兴趣的:(技术)