【Java】泛型类,接口,方法

这篇具有很好参考价值的文章主要介绍了【Java】泛型类,接口,方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

泛型的作用:约束元素的类型 集合
泛型的符号:
T:type
E:element
K:Key
V:value

泛型符号是个占位符,给引用类型占位置
在使用的时候名称没有任何要求,ABCDEFG无所谓,个数也不要求
反省符号应用:

  1. 泛型类
public class GenericCustom<A,B,C> {
}

在本类中,可以把泛型符号当成已知类型来用

public class GenericCustom<A,B,C> {
    private A a;
    private B b;
    private C c;
    
    public GenericCustom() {
    }
    public GenericCustom(A a, B b, C c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }
}

泛型的具体类型在创建对象的时候决定,如果不指定的话全都当成Object,所以说静态方法不能使用泛型,因为他可以直接用类调用

class GTest{
    public static void main(String[] args) {
        GenericCustom<String,Double,Long> g = new GenericCustom<>();
    }
}

泛型接口

public interface GenericInterface<A,B,C> {
    void method1(A a);
    void method2(B b);
    void method3(C c);
}

接口泛型的确认有两种,一种是实现类直接确定泛型,如果不指定就全当成Object

class GenericImpl1 implements GenericInterface<String,Double,Long> {
    @Override
    public void method1(String s) {
        
    }

    @Override
    public void method2(Double aDouble) {

    }

    @Override
    public void method3(Long aLong) {

    }
}

第二种情况就是实现类也不确定泛型,就和泛型类一样在new对象的时候才能确定

class GenericImpl2<A,B,C> implements GenericInterface<A,B,C>{

    @Override
    public void method1(A a) {
        
    }

    @Override
    public void method2(B b) {

    }

    @Override
    public void method3(C c) {

    }
}

泛型方法

public class GenericMethod {

    public static <T> void method1(T t){

    }
    
}

在调用的时候传入什么类型就是什么类型
泛型方法可以是静态的

泛型上下限

正常情况下我们我们写程序会这么写

public abstract class Animal {
    public abstract void eat();
}

class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
}

class Cat extends Animal{

    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}

class Feeder{
    public void feed(List<Animal> animals){
        for (Animal animal : animals) {
            animal.eat();
        }
    }
}

class ATest{
    public static void main(String[] args) {
        Feeder feeder = new Feeder();
        ArrayList<Animal> animals = new ArrayList<>();
        animals.add(new Dog());
        animals.add(new Cat());
        feeder.feed(animals);
    }
}

饲养员Feeder可以操作动物们eat
但是当我有一个Dog的List,我们是不可以把他传入到feed方法的,因为我们feed传入的是Animal类型,所以必须接收Animal类型的List,解决方法是使用通配符

class Feeder{
    public void feed(List<? extends Animal> animals){
        for (Animal animal : animals) {
            animal.eat();
        }
    }
}

这样就提升了泛型的上限,可以用他的子类的List来调用了

而提升下线就是用super

    public void method1(List<? super Dog> Dogs){}

他只能取到Dog及其父类型,所以接去到的是个Object集合,理所当然的,Cat不能被接受到文章来源地址https://www.toymoban.com/news/detail-631131.html

到了这里,关于【Java】泛型类,接口,方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 泛型类和泛型类是并列的关系

    2024年02月05日
    浏览(186)
  • 泛型类传多个参数

    2024年02月05日
    浏览(166)
  • Java语言-----泛型的认识

    目录 一.什么是泛型 二.泛型类的使用 2.1泛型类的定义  2.2泛型类的数组使用 三.泛型的上界  四.泛型的方法 五.泛型与集合 😽个人主页: tq02的博客_CSDN博客-C语言,Java领域博主  🌈梦的目标:努力学习,向Java进发,拼搏一切,让自己的未来不会有遗憾。  🎁欢迎各位→点

    2023年04月23日
    浏览(45)
  • 01 java 学习 数据类型、基础语法、封装、继承、多态、接口、泛型、异常等

    目录 环境搭建和基础知识  什么是JRE: 什么是JDK: 基础数据类型  分支选择if else switch和c一毛一样 for和while循环还有数组基本和c一样 封装 函数调用、传参、命名规范、数组新命名规范 java输入Scanner scanner = new Scanner(System.in); 类的创建和使用以及封装修饰符  构造方法:含义、

    2024年02月11日
    浏览(41)
  • Armadillo:矩阵类、向量类、Cube类和泛型类

    密集矩阵的类,其元素按列优先顺序存储(即逐列) 根矩阵类是 Mattype ,其中 type 是以下项之一: float 、 double 、 std::complexfloat 、 std::complexdoubleshort 、 int 、 long 和无符号的 short 、 int 、 long 为方便起见,定义了以下 typedef: 在本文档中,为了方便起见,使用了垫子类型;

    2024年04月15日
    浏览(39)
  • Effective Java笔记(30)优先考虑泛型方法

            正如类可以从泛型中受益一般 ,方法也一样。静态工具方法尤其适合于泛型化 。 Collections 中的所有“算法”方法(例如 binarySearch 和 sort )都泛型化了 。         编写泛型方法与编写泛型类型相类似 。 例如下面这个方法,它返回两个集合的联合 :      

    2024年02月13日
    浏览(30)
  • java 泛型作为方法的返回值的封装

    业务需要,经常需要http方式调用某服务,然后某服务返回特定类型的返回内容。 类似 String resStr = xxxHttpClient.post() ,然后它返回一个字符串,你还需要反序列化成某种格式的。 返回值可以反序列化成的形式如下: 注意,这里的这个T是个活的,它可能根据接口的内容不同而不

    2024年02月10日
    浏览(42)
  • 【JavaSE】Java进阶知识一(泛型详解,包括泛型方法,协变,逆变,擦除机制)

    目录 泛型 1. 什么是泛型 2.泛型方法 3.通配符上界(泛型的协变) 4.通配符下界(泛型的逆变) 5.泛型的编译(擦除机制)         泛型:就是让一个类能适用于多个类型,就是在封装数据结构时能让封装的类型被各种类型使用所以引入了泛型的概念,虽然有了泛型,什么数

    2024年02月04日
    浏览(44)
  • java~用泛型来定义异常类型,避免方法调用时throws异常

    我们一般在底层写方法时,如果方法显示throws异常,那么在调用时,也需要将这个异常throws出来,例如 调用时 如果调用时不显示throws出异常,编译器会报出错误,如下图 调用方法时,不需要再throws Ex了,这种对调用者更友好,如图 在第一个方法中,使用了泛型类型 来定义

    2024年02月21日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包