<T> T 表示返回值和传入参数的泛型类型一致,代码示例:
package GenericStudy;
import java.util.ArrayList;
import java.util.List;
/**
* @description: java泛型返回值 <T>T 的作用
**/
public class Demo2 {
public static void main(String[] args) {
Demo2 d1 = new Demo2();
//例1
List<String> arr = new ArrayList<>();
arr.add("a");
arr.add("b");
String str = d1.getListFirst(arr);
System.out.println(str);
//例2
String[] strArray=new String[]{"aa","bb","cc"};
List<String> list= d1.copyFromArrayToList(strArray);
}
/**
* 关于参数T1的说明:
* 第一个T1表示<T1>是一个泛型
* 第二个T1表示方法返回的是T类型的数据
* 第三个T1表示集合List传入的数据是T类型
*/
private <T1> T1 getListFirst(List<T1> data) {
if (data == null || data.size() == 0) {
return null;
}
return data.get(0);
}
/**
* 传入T2类型数组返回List<T2>
*/
private <T2> List<T2> copyFromArrayToList(T2[] arr) {
List<T2> list = new ArrayList<>();
for (T2 e : arr) {
list.add(e);
}
return list;
}
}
下图是从其他文章中截取的,其中注释解释“限制“T”为String类型”是有误的,下面会进行解释。
这个例子能正常运行是因为 Demo2<T> 和 private <T> T getListFirst(List<T> data) 中的T 不一样,
完全可以写为:Demo2<T1> 和 private <T2> T2 getListFirst(List<T2> data) ,
这里 private <T2> T2 getListFirst(List<T2> data) 只是用于要求返回和参数类型一致。
package GenericStudy;
import java.util.ArrayList;
import java.util.List;
/**
* @description: java泛型返回值 <T>T 和T的区别
**/
public class Demo2<T> {
public static void main(String[] args) {
Demo2<Integer> d1 = new Demo2<>();
List<String> arr = new ArrayList<>();
arr.add("a");
arr.add("b");
String str = d1.getListFirst(arr);
System.out.println(str);
}
/**
* 关于参数T的说明:
* 第一个T表示<T>是一个泛型
* 第二个T表示方法返回的是T类型的数据
* 第三个T表示集合List传入的数据是T类型
*
* @param data
* @param <T>
* @return
*/
private <T> T getListFirst(List<T> data) {
if (data == null || data.size() == 0) {
return null;
}
return data.get(0);
}
}
若改为 private T getListFirst(List<T> data),则编译不通过,报需要List<Integer>类型作为参数,
这里是因为 Demo2<T> 和 private T getListFirst(List<T> data) 用的是同一个类型参数T,
要求 传入参数 List<T> 和 对象 Demo2<T> 中T类型一致。