Java泛型中<T> T的功能说明
下文笔者讲述Java泛型中T的简介说明,如下所示
泛型简介
泛型(Generic type或generics) 是Java语言的类型系统的一种扩展 她可以代表任意一种引用类型,我们在代码编写时, 只需输入一个占位符即可,那么这个占位符就是T 下文笔者将讲述泛型中的T的简介说明,如下所示
泛型中T的简介
T:常作为泛型的占位符,可代表任何类型 注意事项: 我们日常开发中,有一个约定俗成的规矩 如: E:元素(Element),常用于java集合框架 K:关键字(Key) N:数字(Number) T:类型(Type) V:值(Value)
泛型类型编译说明
Java泛型是伪泛型 Java在编译期间,所有泛型信息都会被擦除 泛型通过类型擦除来实现, --------------------------------------------------------- 编译器在编译时擦除所有泛型类型相关的信息 即在运行时不存在任何泛型类型相关的信息 如: list<Integer> 在运行时仅用一个 List 来表示
泛型擦除的简介
泛型擦除: 是在编译成字节码时首先进行类型检查 然后进行类型擦除(即所有类型参数都用他们的限定类型替换,包括类、变量和方法) 如果类型擦除和多态性发生冲突,就在子类中使用桥接方法解决 如果调用泛型方法的返回类型被擦除,则在调用该方法时插入强制类型转换
类型擦除原则
通用类型的类型参数替换其绑定的有界类型参数; 如果使用无界类型参数,则使用Object替换类型参数; 插入类型转换以实现类型安全; 生成桥接方法以在扩展通用类型中保持多态。
方法中 <T> T说明
<T> T: 表示返回值T的类型是泛型 T是一个占位符
泛型示例
import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.List; public class TestClass { public static void main(String[] args) { TestClass test = new TestClass(); //获取string类型 List<String> array = new ArrayList<String>(); array.add("maomao"); array.add("java265.com"); String str = test.getListFisrt(array); System.out.println(str); //获取Integer类型 List<Integer> nums = new ArrayList<Integer>(); nums.add(88); nums.add(99); Integer num = test.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); } }例2:
import java.util.ArrayList; import java.util.List; public class TestClass2<T> { public static void main(String[] args) { //限制T 为String 类型 TestClass2<String> demo = new TestClass2<String>(); List<String> array = new ArrayList<String>(); array.add("猫猫"); array.add("java265.com"); String str = demo.getListFisrt(array); System.out.println(str); //获取Integer类型 TestClass2<Integer> TestClass2 = new TestClass2<Integer>(); List<Integer> nums = new ArrayList<Integer>(); nums.add(88); nums.add(99); Integer num = TestClass2.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); } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。