Java泛型中<T> T的功能说明

乔欣 Java经验 发布时间:2023-02-17 21:07:53 阅读数:18290 1
下文笔者讲述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);
    }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202302/16766403515835.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者