Java泛型TT与T的使用方法详解

Java泛型TT与T的使⽤⽅法详解
泛型(Generic type 或者 generics)是对 Java 语⾔的类型系统的⼀种扩展,以⽀持创建可以按类型进⾏参数化的类。可以把类型参数看作是使⽤参数化类型时指定的类型的⼀个占位符,就像⽅法的形式参数是运⾏时传递的值的占位符⼀样。
在集合框架(Collection framework)中泛型的⾝影随处可见。例如,Map 类允许向⼀个 Map 类型的实例添加任意类的对象,即使最常见的情况在给定映射(map)中保存⼀个string键值对。
命名类型参数
对于常见的泛型模式,推荐的泛型类型变量:
E:元素(Element),多⽤于java集合框架
K:关键字(Key)
N:数字(Number)
T:类型(Type)智能游戏者
V:值(Value)
⼤家都知道,Java的泛型是伪泛型,这是因为Java在编译期间,所有的泛型信息都会被擦除,正确理解泛型概念的⾸要前提是理解类型擦除。Java 泛型是如何⼯作的?什么是类型擦除?答:泛型是通过类型擦除来实现的,编译器在编译时擦除了所有泛型类型相关的信息,所以在运⾏时不存在任何泛型类型相关的信息,譬如 List<Integer> 在运⾏时仅⽤⼀个 List 来表⽰,这样做的动机是兼容 Java 1.5 之前版本。
泛型擦除具体来说就是在编译成字节码时⾸先进⾏类型检查,然后进⾏类型擦除(即所有类型参数都⽤他们的限定类型替换,包括类、变量和⽅法),最后如果类型擦除和多态性发⽣冲突,就在⼦类中使⽤桥接⽅法解决;如果调⽤泛型⽅法的返回类型被擦除,则在调⽤该⽅法时插⼊强制类型转换。在类型擦除中,编译器确保不会创建额外的类,并且没有运⾏时开销。
类型擦除原则
⽤通⽤类型的类型参数替换其绑定的有界类型参数;
如果使⽤⽆界类型参数,则使⽤Object替换类型参数;
插⼊类型转换以实现类型安全;
⽣成桥接⽅法以在扩展通⽤类型中保持多态。
<T> T 和T的区别:T是Type的⾸字母缩写;<T> T 表⽰“返回值”是⼀个泛型,传⼊什么类型,就返回什么类型;⽽单独
的“T”表⽰限制传⼊的参数类型。
铝空气电池
<T> T 的⽤法
这个<T> T 表⽰返回值T的类型是泛型,T是⼀个占位符,⽤来告诉编译器,这个东西是先给我留着,等我编译的时候再告诉你是什么类型。
智能调度系统
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 = ListFisrt(array);
System.out.println(str);
//获取Integer类型
List<Integer> nums = new ArrayList<Integer>();
nums.add(31);
nums.add(32);
Integer num = ListFisrt(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;
}
(0);
}
}
T 的⽤法
单独的T表⽰限制参数的类型。这种⽤法⼀般多⽤于共同操作⼀个类对象,然后获取⾥⾯的集合信息。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 = ListFisrt(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 = ListFisrt(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;
}
(0);
}
}
排石床
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

本文发布于:2024-09-23 07:27:14,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/307898.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:类型   擦除   参数   泛型   编译器   信息   替换   对象
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议