一、 前置知识:
T 在 Java 泛型中,被称作类型变量。那什么又是类型变量?
类型变量:在整个类的定义中用于指定方法的返回类型,同时也可以指定属性和局部变量的类型。可以用具体的类型来替换类型变量来实例化泛型类型。
如果经常看源码,就能看到很多类似于 T 这种类型变量,简单介绍一下这些类型变量分别代表什么含义。(其实用什么字母表示都可以,这里只是讲解通用的字母表示)
字母 | 通常在哪些位置使用(含义) |
---|---|
T、U、S | 任意类型 |
K | 键类型 |
V | 值类型 |
E | 集合元素类型 |
N | 数字类型 |
二、<T> T/ T/<T>的区别:
首先展示代码示例:
public class Test {
public static void main(String[] args) {
//注意:这里不能是基本数据类型,否则后期调方法传具体类型时报错
Double[] num = {1.1,2.2,3.3};
String[] str = {"hello","word"};
Test01 test01 = new Test01();
test01.one(num);
test01.one(str);
Test02 test02 = new Test02();
test02.two(num);
test02.two(str);
Test03 test03 = new Test03();
test03.three(num);
test03.three(str);
}
}
class Test01 {
public <T> T one(T[] arr) {
return arr[1];
}
}
class Test02 {
public T two(T[] arr) {
return arr[1];
}
}
class Test03 {
public <T> void three(T[] arr) {
T t = arr[1];
}
}
先看:Test01类编写的方法的返回值样式为 <T> T
,Test02类编写的方法返回值的样式为 T
① Test02报错:
注意:如果方法的返回值写成 T,那类必须为泛型(也就是改成 Test02<T>
,否则报错)
②
再说下 Test03:public <T>
中的这个 T 是修饰符(标识)的功能,代表这是个泛型方法。并不是返回值类型,而是表示这里传入的参数是泛型 或者 下面定义的变量是泛型。(说简单点:<T>
就是确保参数中可以出现 T 这种数据类型或者 方法中定义的变量可以是 T 这种数据类型)
总结:
<T> T
:<T>
就是标识,也就是修饰 T,表明后期传入的 T 不固定。T
:就是简单的泛型,按照泛型的基本功能使用即可。但需要注意类后面有时候要加<T>
。<T>
:就是标识、修饰的功能