首页 > 其他分享 >泛型

泛型

时间:2024-06-09 22:35:02浏览次数:12  
标签:变量 void System 泛型 public out

泛型就是一种自定以声明变量的类型
也就是把类型变成一种参数进行传递

点击查看代码
public class a<T>{
   public T X;

   public  a(T s){
       this.X =s;
       System.out.print(this.X);

   }

    public static void main(String[] args) {
        a<String>  obj = new a("kkkk");
    }
}

///////////////////////////

public class a<T>{
   public T X;

   public  a(T s){
       this.X =s;
       System.out.print(this.X);

   }

    public static void main(String[] args) {
        a<Integer>  obj = new a(111);
    }
}

相当于我们把类也当做了自定义的参数

但需要注意的是在类里面定义的泛型方法的泛型变量是和泛型类毫无关系的,也就是说我们可以自定义泛型类里面的泛型方法

点击查看代码
public class a<T>{
   public T X;
   public  a(T s){
       this.X =s;
       System.out.print(this.X);
   }
   public <T> void rr(T arg){ //这个泛型变量T就不再是泛型类的T了 他归属于这个泛型方法本身
       System.out.println(arg.getClass());
   }

   public void aa(T name){
       System.out.println(name.getClass());
   }

    public static void main(String[] args) {
         a<Integer> haha = new a<>(111); //可以看到泛型类的T是Integer
         haha.<String>rr("SDSDSDS");     //泛型方法的T是String
         haha.aa(111);
    }
}





限定泛型
限定接口
image



当我们泛型如果既要满足继承条件又要满足继承接口那么继承的类要先写前面然后再加上&连接接口类
image



约束条件

类型变量T不能被实例化
类型变量不能在静态域或静态方法中使用,但是静态方法本身就是泛型方法就可以
泛型实例化成对象后不能用instanceof
不论传入的类型变量是啥,所有泛型类实例出来的对象getClass都相同
还有两个比较偏就不写了
image

image

泛型的继承

就算类型变量T具有继承关系,我们的泛型类之间也毫无关系
例如orange继承了fruit类但是
以他们两位类型变量的泛型类是毫无干系的
image
如下
image
print(b)会报错

通配符

为了解决上述问题就引入了通配符的概念
? extends Fruit 就规定了我们的类型变量的上限就是Fruit类只能传入这个类本身或者他的子类
这样print(b)就没问题了

image

? super Apple 的意思是要传入的类型得是Apple或者他的父类
image

标签:变量,void,System,泛型,public,out
From: https://www.cnblogs.com/wssw/p/18227620

相关文章

  • 泛型擦除的原理
    以下程序的输出是什么:List<String>stringList=newArrayList<>();List<Integer>intList=newArrayList<>();//输出trueSystem.out.println(stringList.class==intList.class);输出为true,这意味两个list的class地址都一样,为同一个字节码文件。这个试验也侧面反映出......
  • Java学习【深入探索包装类和泛型】
    Java学习【深入探索包装类和泛型】......
  • 泛型的擦除问题和注意事项
    泛型是工作在编译阶段的,一旦程序编译成class文件,class文件中就不存在泛型了,这就是泛型擦除。泛型不支持基本数据类型,只能支持对象类型(引用数据类型)。一些常见的对象类型:Integer:  int的对象类型Double: double的对象类型建议不要用记事本直接打开class文件,有......
  • 泛型无界通配符<?>的思考
    起因:无界通配符<?>作为参数可以接受任意类型参数,入参的具体类型在调用方法时并不需要确定,联想到泛型方法中参数的类型是在调用方法时被定义,实践探究二者异同。publicclassGeneric01{publicstaticvoidmain(String[]args){ArrayList<String>arrayList=new......
  • 数据结构第四篇【再谈泛型】
    数据结构第四篇【再谈泛型】泛型泛型类的使用泛型的上界泛型方法通配符通配符上界通配符下界......
  • java中的泛型
    目录一、定义二、使用语法三、注意事项四、从泛型类派生子类情况一情况二五、泛型接口语法接口的使用一、定义class类名<泛型标识1,泛型标识2,…>{ private泛型标识1变量名;}常用的泛型标识:T,E,K,V二、使用语法类名<具体的数据类型>对象名=new类名<具体的数据类型......
  • ref和reaction的区别(以及TS中ref,computed函数会自动推断定义其泛型(一般不用自己动手))
    其次就是了解ref,reactive的区别。ref通过对象名.value来访问对象里的值,若对象里还有属性则访问其需要:对象名.value.属性名reactive则通过:对象名.属性名,来直接访问属性值其次,两者都是响应式对象。但如果对直接对reactive对象进行赋值,那么其会丢失响应性。代码示例如下:<scri......
  • Java base(1):注解、泛型、通配符、重载、重写
    注解:用于在代码中插入元数据,不会直接影响程序的执行,但可以被编译器、开发工具或运行时环境用来处理特定任务,如编译时检查、生成额外的代码、进行框架级配置等。预定义注解:java给的,例如:@Override:用于标记一个方法是重写父类的方法。自定义注解元注解:注解其他注解的注解。元数......
  • Java泛型中<? extends E>和<? super E>的区别
    <?extendsE>      <?extendsE>是UpperBound(上限)的通配符,用来限制元素的类型的上限,比如List<?extendsFruit>fruits;表示集合中的元素类型上限为Fruit类型,即只能是Fruit或者Fruit的子类,因此对于下面的赋值是合理的fruits=newArrayList<Fruit>();fruits......
  • java泛型基础
    ​ 一、泛型介绍: JDK5除了推出foreach新循环,还推出了一个新特性:泛型泛型作用:在一个类或接口的声明处指定该类中某个属性的类型。或声明方法返回值的类型或方法参数的类型  泛型也称为参数化类型。它允许我们在一个类或接口的声明处指定该类中某个属性的类型或  ......