首页 > 其他分享 >Class<String> 还是 Class< ? extends String>

Class<String> 还是 Class< ? extends String>

时间:2022-09-25 19:56:15浏览次数:65  
标签:name Class public extends Animal class String

Class 还是 Class< ? extends String>

引出问题

先上代码

点击查看代码
        Class<String> class01 = String.class;
        Class <? extends String> class02 = "hsp".getClass();

问题所在

为什么第一张图报错,第二张图却没有?

我的测试

上代码

点击查看代码
package com.pigplay;

/**
 * @Author:PigBrother
 * @Date:2022/9/25
 * @Description:ToDo
 */

public class Class_ {
    public static void main(String[] args) {
        // test
        Animal buru      = new Animal("哺乳动物");
        Pig    pig       = new Pig("小花猪");
        Dog    muyangDog = new Dog("牧羊犬");


        Class<? extends Animal> aClass = buru.getClass(); //一定要用 <? extends Animal>

        Class<Animal>           animalClass  = Animal.class; //可以用 <Animal>
        Class<? extends Animal> animalClass1 = Animal.class; // 也可以用<? extends Animal>

        Class<Pig>              pigClass1 = Pig.class; //可以用<Pig>
        Class<? extends Pig>    pigClass2 = Pig.class;// 也可以用 <? extends Pig>
        Class<? extends Animal> pigClass3 = Pig.class; //还可以用 <? extends Animal>


        pigClass1 = Dog.class; //报错 Required type: Class<Pig>  Provided:Class<Dog>
        pigClass2 = Dog.class; //报错 Required type: Class<? extends Pig>  Provided:Class<Dog>
        pigClass3 = Dog.class; // 不报错

    }
}


class Animal {
    private String name;

    public Animal() {
    }

    public Animal(String name) {
        this.name = name;
    }
}

class Pig extends Animal {
    public Pig() {
    }

    public Pig(String name) {
        super(name);
    }
}

class Dog extends Animal {
    public Dog() {
    }

    public Dog(String name) {
        super(name);
    }
}


结论

  • 通过 对象.getClass() 拿到的class 对象,要用 Class< ? extends xxx> 来接收,即要用泛型通配符和泛型的上界

  • 通过 类.class 拿到的class 对象,既可以用Class< ? extends xxx> ,也可以用 Class 来接收。

参考资料

关于 泛型通配符和泛型的上界 的讲解,下面这个视频讲得非常好! 这是B站的 一个java 进阶视频系列中关于泛型的一个小节。
一个视频

标签:name,Class,public,extends,Animal,class,String
From: https://www.cnblogs.com/PigBrotherLove/p/16728562.html

相关文章

  • 简单测试C语言<string.h>中strerror(int errornum)能输出什么
    使用一个简单程序来验证一下:#include<stdio.h>#include<string.h>intmain(intargc,char*argv[]){for(inti=-5;i<50;i++)printf("errno[%2......
  • 011——常用API(String , ArrayList)
    常用API(String,ArrayList)API(ApplicationProgrammingInterface,应用程序编程接口)Java写好的程序(功能),咱们可以直接调用。Oracle也为Java提供的这些功能代码......
  • 【解决报错】Invalid prop: type check failed for prop "index". Expected String wi
    在使用elementUI循环渲染导航的过程中<el-submenuv-for="iteminhasChildren":index="item.path+''":key="item.path"><templateslot="title"><i:clas......
  • Java基础语法 String类型变量使用
    packageBasicGrammar;/*String类型变量的使用1.String属于引用数据类型,翻译为:字符串2.声明String类型变量时,使用一对""3.String可以和8种基本数据类型变量做运......
  • 存储类StorageClass
    存储类StorageClass是kubernetes资源类型的一种,它是由管理员为管理pv之便而按需创建的类别(逻辑组),例如可按存储系统的性能高低分类,或者根据其综合服务质量级别进行分类......
  • create instance error, class xxx.xxx$xx类错误
    反序列化的fastjson方法Listalist=JSONObject.parseArray(Stringtext,Classclazz)例如下面这个需要反序列化的多层嵌套复杂接收对象内部类必须定义成静态的,static,不......
  • JavaScript 字符串(String) 对象
    字符串可以使用单引号或者双引号使用位置索引可以访问字符串中的任何字符,字符第一个字符为【0】,依次等可在字符串中使用引号varanswer="Heiscalled'Johnny'";也可......
  • 无法将类型string隐式转换为textbox wpf中
    大致意思是这样的,想把我获取到的字符串放入textbox中,然后我就写了这么一句a.textbox="获取到的字符串"  然后就有了下面的错误,啥也不说,强转a.textbox=(Textbox)"获取......
  • Typescript类中extends和implements的作用
    在ES6中,类的继承可以通过extends实现。classAnimal{name;sayHello(){}}classDogextendsAnimal{}//constdog=newDog();//在Dog的实例dog......
  • Lightroom Classic2022(Lr2022)mac/win
    一款以后期制作为重点的图形工具软件LightroomClassic2022简称Lr2022,其增强的校正工具、强大的组织功能以及灵活的打印选项可以帮助您加快图片后期处理速度,将更多的时间投......