01-描述
T表示:返回值T是泛型,T只是一个占位符,用来告诉编译器,这个东西先给我留着,等我编译的时候再告诉你是什么类型。
02-用法
第一种用法:
Demo类的getListFisrt方法可以接受任意类型List参数。
package com.eleven.csdn0115;
import java.util.ArrayList;
import java.util.List;
/**
* <T> T表示:返回值T是泛型,T只是一个占位符,用来告诉编译器,这个东西先给我留着,等我编译的时候再告诉你是什么类型。
*
* @author sywangu
*
*/
public class Demo {
public static void main(String[] args) {
Demo demo = new Demo(); // 创建一个demo对象
// 获取String类型
List<String> array = new ArrayList<String>(); // 创建一个ArrayList数组
array.add("a");
array.add("b");
demo.getListFirst(array); // Demo类的getListFisrt方法可以接受任意类型List参数
System.out.println(array); // 打印出的结果是[a, b]
// 获取Number类型
List<Integer> nums = new ArrayList<Integer>();
nums.add(12);
nums.add(13);
demo.getListFirst(nums);
System.out.println(nums); // 打印出的结果是[12, 13]
}
/**
* <T> T 表示可以传入任何类型 参数T
* 第一个T表示泛型
* 第二个T表示返回的是T类型的数据
* 第三个T限制参数类型为T
*
* @param data
* @return
*/
private <T> T getListFirst(List<T> data) {
if (data == null || data.size() == 0) {
return null;
}
return data.get(0);
}
}
第二种用法:
Demo2类在初始化的时候已经限定了T的类型,所以getListFirst方法只能接受List类型的参数。
package com.eleven.csdn0115;
import java.util.ArrayList;
import java.util.List;
/**
* 单独T的用法
*
* @author sywangu
*
*/
public class Demo2<T> {
public static void main(String[] args) {
// 获取String类型
Demo2<String> demo = new Demo2<>(); // 限制"T"的类型为String
List<String> array = new ArrayList<String>(); // 返回的类型是String
array.add("a");
array.add("b");
String str =demo.getListFirst(array); // 返回的类型是String
System.out.println(array); // 打印出的结果是[a, b]
// 获取Number类型
Demo2<Integer> demo2 = new Demo2<Integer>(); // 限制"T"的类型为String
List<Integer> nums = new ArrayList<Integer>(); // 返回Integer类型
nums.add(1);
nums.add(2);
Integer num = demo2.getListFirst(nums); // 返回的类型是Integer
System.out.println(nums); // 打印出的结果是[1, 2]
}
/**
* 通用方法
* @param data
* @return
*/
private T getListFirst(List<T> data) {
if(data == null || data.size() == 0) {
return null;
}
return data.get(0);
}
}