美文网首页Android开发Android技术知识Android开发
学会Java泛型系列(二):泛型定义与使用

学会Java泛型系列(二):泛型定义与使用

作者: 涅小黑 | 来源:发表于2020-03-22 11:47 被阅读0次

泛型的核心概念:告诉编译器想使用什么类型,然后它帮你处理一切细节

泛型类定义

class Holder<T>{
    private T a;

    public Holder(T a){
        this.a = a;
    }

    public T getA() {
        return a;
    }

    public void setA(T a) {
        this.a = a;
    }
}

class Holder<T>中的T就是类型参数,类型参数的命名规则跟变量的命名规则一样,但常用T、E、K、V命名,一般使用一个大写字母。

    Holder<String> strHolder = new Holder<String>("str");
    //Holder<Integer> intHolder = new Holder<Integer>("str"); 
    //参数类型定义为Integer,传入string的话编译器就会拒绝

    String str = strHolder.getA();//编译会自动转换成String,不需要做类型转换

泛型的好处显而易见,Holder可以处理所有类型,编译器帮助类型判断与类型转换,Java1.5后集合类使用泛型实现,提高了可读性和安全性。

泛型类继承

class Holder2 extends Holder<String>{

    public Holder2(String a) {
        super(a);
    }

    @Override
    public void setA(String a) {
        super.setA(a);
    }

    @Override
    public String getA() {
        return super.getA();
    }
}

继承泛型类的时候需要指明继承类的类型参数,如果不声明的话,编译器会把它当成Object

class Holder3 extends Holder{

    public Holder3(Object a) {
        super(a);
    }

    @Override
    public void setA(Object a) {
        super.setA(a);
    }

    @Override
    public Object getA() {
        return super.getA();
    }
}

这样的话Holder2和Holder3就不是泛型类了,也可以这样继承

class Holder4<T> extends Holder<T>{

    public Holder4(T a) {
        super(a);
    }

    @Override
    public void setA(T a) {
        super.setA(a);
    }

    @Override
    public T getA() {
        return super.getA();
    }
}

Holder4依然是泛型类,父类的参数类型也是由Holder4在使用时定义

class Holder5<T,E,K,V> extends Holder<T>{

    private E e;

    public Holder5(T a) {
        super(a);
    }
    
}

泛型类是可以定义多个类型参数的

泛型接口定义

泛型接口的定义跟泛型类的定义差不多

interface Holder<T>{
    void setElement(T t);
    T getElement();
}

 class HolderImpl implements Holder<String>{

     @Override
     public void setElement(String s) {

     }

     @Override
     public String getElement() {
         return null;
     }
 }

泛型方法定义

 class Holder{
    
     public <T> void f(T t){
         System.out.println(t.getClass().getName());
     }

 }

    Holder holder = new Holder();
    holder.f(33);
    holder.f("1231");

在返回值前面声明类型参数,使用的时候不用指定具体类型,编译器会做类型推断

目录

学会Java泛型系列(零):简介及目录
学会Java泛型系列(一):Java泛型
学会Java泛型系列(二):泛型定义与使用
学会Java泛型系列(三):泛型原理-擦除
学会Java泛型系列(四):擦除带来的问题以及解决办法
学会Java泛型系列(五):限定符
学会Java泛型系列(六):常用案例

相关文章

  • 学会Java泛型系列(二):泛型定义与使用

    泛型的核心概念:告诉编译器想使用什么类型,然后它帮你处理一切细节 泛型类定义 class Holder中的T...

  • Java泛型

    参考:Java知识点总结(Java泛型) 自定义泛型类 自定义泛型接口 非泛型类中定义泛型方法 继承泛型类 通配符...

  • 泛型

    与Java泛型相同,Kotlin同样提供了泛型支持。对于简单的泛型类、泛型函数的定义,Kotlin 与 Java ...

  • 最强整理:一线互联网移动架构师筑基必备技能之Java篇

    移动架构师筑基必备技能 一、深入Java泛型 泛型的作用与定义通配符与嵌套泛型上下边界RxJava中泛型的使用分析...

  • 泛型介绍

    各种泛型定义及使用 1、泛型类定义及使用 我们先看看泛型的类是怎么定义的: [java]view plaincop...

  • 四 集合 ——第二节 泛型

    文章目录 1、 泛型概念2、 使用泛型的好处3、 泛型的定义与使用 3、1 定义和使用含有泛型的类3、2 含有泛型...

  • Java泛型(黑马程序员武汉中心)

    Java泛型 一、概述 1、泛型含义 2、泛型好处 3、泛型分类 二、常见的泛型案例 1、泛型方法 A.定义时 B...

  • Android 开发也要掌握的Java知识 - Java泛型

    如果需要看泛型擦除Java泛型擦除 1.Java泛型有什么用?为啥要使用泛型? Java中数组的类型是定义的时候就...

  • 夯实JAVA基础之 - 泛型

    泛型的定义及使用 1. 定义泛型: 2. 类中使用泛型 3. 使用泛型类 4. 使用泛型的优势? 多泛型变量的定义...

  • Java泛型与Kotlin泛型

    Java泛型 学习并掌握泛型类和泛型接口定义和使用 学习并掌握泛型函数的定义和使用 很清晰明了的使用教程 Kotl...

网友评论

    本文标题:学会Java泛型系列(二):泛型定义与使用

    本文链接:https://www.haomeiwen.com/subject/ugopyhtx.html