<T> T 和T的区别:T是Type的首字母缩写;<T> T 表示“返回值”是一个泛型,传入什么类型,就返回什么类型;而单独的“T”表示限制传入的参数类型。
<T> T 的用法
这个<T> T 表示返回值T的类型是泛型,T是一个占位符,用来告诉编译器,这个东西是先给我留着, 等我编译的时候再告诉你是什么类型。
这里的demo只用定义一次,参数类型直接从传递的参数中获取。
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
public class Demo {
public static void main(String[] args) {
Demo demo = new Demo();
//获取string类型
List<String> array = new ArrayList<String>();
array.add("test");
array.add("doub");
String str = demo.getListFisrt(array);
System.out.println(str);
//获取Integer类型
List<Integer> nums = new ArrayList<Integer>();
nums.add(31);
nums.add(32);
Integer num = demo.getListFisrt(nums);
System.out.println(num);
}
/**
* 这个<T> T 可以传入任何类型的List
* 关于参数T
* 第一个 表示是泛型
* 第二个 表示返回的是T类型的数据
* 第三个 限制参数类型为T
*
* @param data
* @return
*/
private <T> T getListFisrt(List<T> data) {
if (CollectionUtils.isEmpty(data)) {
return null;
}
return data.get(0);
}
}
T 的用法
单独的T表示限制参数的类型。这种用法一般多用于共同操作一个类对象,然后获取里面的集合信息。
对象调用的方法参数类型必须和对象类型保持一致,所以这里传递String和Integer类型的参数到方法中时分别定义对应类型的对象。
import java.util.ArrayList;
import java.util.List;
public class Demo2<T> {
public static void main(String[] args) {
//限制T 为String 类型
Demo2<String> demo = new Demo2<String>();
List<String> array = new ArrayList<String>();
array.add("Tom");
array.add("河南");
String str = demo.getListFisrt(array);
System.out.println(str);
//获取Integer类型
Demo2<Integer> demo2 = new Demo2<Integer>();
List<Integer> nums = new ArrayList<Integer>();
nums.add(12);
nums.add(13);
Integer num = demo2.getListFisrt(nums);
System.out.println(num);
}
/**
* 这个只能传递T类型的数据
* 返回值 就是Demo<T> 实例化传递的对象类型
*
* @param data
* @return
*/
private T getListFisrt(List<T> data) {
if (data == null || data.size() == 0) {
return null;
}
return data.get(0);
}
}