------- android培训、java培训、期待与您交流! ----------
泛型
泛型好处以及使用
泛型是jdk1.5增加的新特性, 用来限定类型
1. 泛型优点:
1) 提高了程序的使用性, 指定泛型后, 取出集合中元素师不需要强转
2) 将原来在运行期处理的问题放到了编译期
3) 提高了代码安全性, 指定泛型的集合只能存储单一类型数据
2. 泛型缺点
指定泛型后集合中不可以随便添加不同类型的元素
3. 类泛型, 方法泛型, 接口泛型
1) 类泛型
class className<T> {
T t;
public T getT(T t){
return t;
}
}
这里的T可以是任意类型, 只限于在类内部使用
2) 方法泛型
public <T> T get(T t) {
return t;
}
这里的T只可以在方法内部使用, 并且要定义在返回值类型前面, 这里的返回值也是T类型的
3) 接口泛型
interface iter<T> {
public T get();
}
注意: 同时可以定义多个泛型, 用逗号隔开, 泛型的名字可以是任意字符, api中常见的E和T代表的是element和Type
4. 泛型限定通配符
<? extends E> 代表E或者E的子类型
<?> 任意类型
<? super E> 代表E或者E的父类型
5. 迭代器使用泛型
Iterator迭代使用了泛型的集合, 必须个Iterator指定泛型, 这样在迭代过程中就不用转换元素类型
6. 擦除泛型
这段代码演示了擦除泛型
List<String> list = new ArrayList<String>();
list.add(“a”);
list.add(“b”);
//这时候是不能添加String类型以外的元素
List l = list; //将list指向的对象赋给没有指定泛型的引用
l.add(123); //123成功添加进了集合
System.out.println(list); //结果是[a, b,123]
7. 定义泛型的其它方式
List list1 = new ArrayList<String>(); //所有类型都可以加入
List<String> list2 = new ArrayList(); //指定类型可以加入
这两种方式都是为了兼容老项目, 平时开发中不建议使用
Jdk1.7后简化方式,ArrayList<String> list = new ArrayList<>();
跟ArrayList<String>list = new ArrayList<String>(); 功能一样
代码示例
class FanTest {
public static void main(String[] args) {
// 用类指定的泛型构造方法传值
Cla<Double> c = new Cla(12.5);
int i = 10;
System.out.println(c.a + i); // 打印结果 22.5
// 调用泛型方法
System.out.println(c.get(10, '+') + i); // 打印结果 10+10
}
}
// 实现接口Inter
class Cla<A> implements Inter<String> {
A a;
// 创建对象的时候打印a
Cla(A a) {
this.a = a;
}
// 重写接口中的方法
public <Integer, Character> String get(Integer i, Character c) {
return "" + i + c;
}
}
// 接口指定泛型
interface Inter<T> {
// 泛型方法
public <E, B> T get(E e, B b);
}