首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >JAVA--泛型复习

JAVA--泛型复习

作者头像
大忽悠爱学习
发布2021-11-15 15:31:45
发布2021-11-15 15:31:45
3060
举报
文章被收录于专栏:c++与qt学习c++与qt学习

泛型复习


泛型的生命周期

  • Java中的泛型,只在编译阶段有效,在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦除,并且在对象进入和离开方法的边界处添加类型检查和类型转换方法。也就是说,泛型信息不回进入到运行时阶段

泛型类

代码语言:javascript
复制
class A<T>
{
  private  T key;

    public T getKey() {
        return key;
    }

    public void setKey(T key) {
        this.key = key;
    }
}

泛型类使用测试:

代码语言:javascript
复制
        //在new A对象的时候,指定泛型的类型为String
       A<String> a1=new A<>();//这边有自动类型推导
       //对象使用setKey(T key)方法中的key形参就是String类型
        a1.setKey("大忽悠");
        String key = a1.getKey();
       
       A<Integer> a2=new A<>(); 
       a2.setKey(1);
        Integer key1 = a2.getKey();
        
       //在创建对象时,不指定泛型,那么相当于指定了一个Object类型
        A a3=new A();
        a3.setKey("大忽悠");
        Object key2 = a3.getKey();在这里插入代码片

同样的类,但是在new对象时泛型指定不同数据类型,这些对象不能互相赋值


泛型接口

代码语言:javascript
复制
public interface Dhy<T>
{
    T test(T t);
}

类实现该接口,但是不写泛型,默认是Object类型,同上

代码语言:javascript
复制
public class DhyImpi implements Dhy 
{
    @Override
    public Object test(Object o) {
        return null;
    }
}

类实现接口,未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需要将泛型的声明也一起加到类中

代码语言:javascript
复制
public class DhyImpi<T> implements Dhy<T>
{
    @Override
    public T test(T t) {
        return null;
    }
}

如果不声明泛型,如:

代码语言:javascript
复制
public class DhyImpi implements Dhy<T>

编译器会报错: "Unknown class"


如果实现接口时,指定了接口的泛型的具体数据类型,这个类实现接口所有方法的位置都要指定泛型替换实际的具体数据类型

代码语言:javascript
复制
public class DhyImpi implements Dhy<Integer>
{

    @Override
    public Integer test(Integer integer) {
        return null;
    }
}

泛型方法

代码语言:javascript
复制
public class Xpy<E> 
{
    //静态变量的类型不能是泛型
    //static private E e;
    private  E e;
    //静态方法的泛型
    public static <T> void test3(T t)
    {
        //在静态方法中,不能使用类定义的泛型,如果要使用泛型,只能使用静态方法自己定义的泛型
        //System.out.println(e);
        System.out.println(t);
    }
    //在修饰符后面加上泛型,那么当前方法内部就可以使用该泛型
    public <T> void show(T t)
    {
        //在类上定义的泛型,可以在普通的方法中进行使用
        System.out.println(e);
       T s=t;
    }
    public <T> T test(T t)
    {
        return t;
    }
    //可变参数的泛型方法
    public <T> void test2(T...str)
    {
        for (T t : str) {
            System.out.println(t);
        }
    }
}

关于泛型方法的总结

  • 泛型方法,在调用之前没有固定的数据类型
  • 在调用时,传入的参数是什么类型,就会把泛型改成什么类型
  • 泛型方法会在调用时确定泛型具体的数据类型
  • 静态变量类型不能是泛型
  • 静态方法只能使用当前静态方法定义的泛型

泛型通配符

有限制的通配符

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/09/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 泛型复习
  • 泛型的生命周期
  • 泛型类
  • 泛型接口
  • 泛型方法
    • 关于泛型方法的总结
  • 泛型通配符
    • 有限制的通配符
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档