美文网首页
Java基础之<泛型>

Java基础之<泛型>

作者: 写程序的小火箭 | 来源:发表于2018-08-05 15:08 被阅读0次

泛型类和泛型方法

泛型是Java语言中实现程序多态的一种重要方法,泛型多用于底层代码中,以此来保证代码的通用型。今天咱们就来简单的讲一下泛型中的基本内容

泛型的定义

泛型的定义主要有以下两种:

1.在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象。
2.在程序编码中一些包含参数的类。其参数可以代表类或对象等等。

上述引用维基百科中对泛型的定义,通俗的讲,在Java中泛型就是可以让类或者方法的输入类型可变,形式上用特殊的符号(例如T,K,V)等来代替原来方法或者类型的参数,可以理解为占位符。这个占位符在程序的编译阶段将被翻译成为我们输入的类型,以此来实现程序的多态。

泛型类

public class Pair<T>
{
    private T first;
    private T second;

    public Pair()
    {
        this.first = null;
        this.second = null;
    }
    public Pair(T first, T second)
    {
        this.first = first;
        this.second = second;
    }
    public T getFirst() { return first; }
    public void setFirst(T first) { this.first = first; }
    public T getSecond() { return second; }
    public void setSecond(T second) { this.second = second; }
}

泛型类是泛型最基本的应用之一,很多JDK源码中的类型,例如List、Map、Set等都是以泛型类的形式定义的。在类的定义时,在类名之后以<T>作为类型标志,并在类的方法中使用该类型进行参数声明。该类使用时同样以<Integer>的形式,进行类型的注入。当不进行类型的限定时,类型变量<T>继承于Object类。我们在使用泛型的时候,不能使用类似于int、double等基本类型,而是需要使用Integer、Double等包装类型下面我们来看一个例子

    public static Pair<Integer> minmax(Integer...a)
    {
        if(a == null || a.length == 0) {return null;}
        Integer max = a[0];
        Integer min = a[0];
        for(Integer num : a)
        {
            if (min.compareTo(num) > 0) min = num;
            if (max.compareTo(num) < 0) max = num;
        }
        return new Pair<>(min,max);

minmax()方法可以获得一个输入数组的最大值和最小值,方法的返回类型为Pair<Integer>,即上述定义的Pair类的一个对象。

        Integer[] words = {3, 7, 9, 2};
        ArrayAlg arrayAlg = new ArrayAlg();
        Pair<Integer> pair = arrayAlg.minmax(words);
        System.out.println("min is : " + pair.getFirst());
        System.out.println("max is : " + pair.getSecond());

调用该方法的输出为

min is : 2
max is : 9

泛型方法

上述minmax()方法中使用了泛型类,但该方法却不是一个泛型的方法。该方法规定了我们仅可以输入Interger类型的数据。接下来,我们需要对该方法进行改造,将方法的输入和返回值也改成泛型。即用类型变量T去替代之前方法中的Integer类型。

    public static <T> Pair<T> minmax2(T...a)
    {
        if(a == null || a.length == 0) {return null;}
        T max = a[0];
        T min = a[0];
        for(T num : a)
        {
            if (min.compareTo(num) > 0) min = num;
            if (max.compareTo(num) < 0) max = num;
        }
        return new Pair<>(min,max);
    }

但是进行改造之后,编译器报错,并不能编译通过。原因是因为泛型变量中找不到compareTo()方法。

Error:(56, 20) java: 找不到符号
  符号:   方法 compareTo(T)
  位置: 类型为T的变量 min
Error:(57, 20) java: 找不到符号
  符号:   方法 compareTo(T)
  位置: 类型为T的变量 max

类型变量的限定

compareTo()方法是Comparable接口的实现,解决上述编译器错误,需要通过类型变量的限定完成。将方法的声明该成如下形式

public static <T extends Comparable> Pair<T> minmax2(T...a)

则在代码编译的时候,将继承Comparable,也就意味着参数的输入仅可以为实现Comparable接口的类型。

        Double[] words2 = {3.0, 7.0, 9.0, 2.0};
        Pair<Double> pair2 = arrayAlg.minmax2(words2);
        System.out.println("min is : " + pair2.getFirst());
        System.out.println("max is : " + pair2.getSecond());

程序的输出为

min is : 2.0
max is : 9.0

相关文章

  • Java基础之泛型

    Java基础之泛型 泛型基本介绍 简单介绍在jdk1.6之前,还没有使用到泛型,Java类型分为原始类型、复杂类型...

  • 详解Java泛型之3——十分钟理解泛型擦除

    前面我们介绍了泛型以及通配符的基础概念,可以参考文章: 详解Java泛型之1——入门泛型必懂的知识点[https:...

  • Java 泛型

    导读 移动开发知识体系总章(Java基础、Android、Flutter) 为什么会有泛型? 泛型类 泛型方法 泛...

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

  • Java基础之泛型

    转载: https://blog.csdn.net/s10461/article/details/53941091...

  • java基础之泛型

    Java 泛型,你了解类型擦除吗? 1. 函数上的泛型定义 当函数中使用了一个不明确的数据类型,那么在函数上就可...

  • Java 基础 之 泛型

    一:什么是泛型 泛型在我们的代码中使用非常广泛的一部分知识,今天就系统的把泛型总结一下,并记录自己的学习历程...

  • Java基础之<泛型>

    泛型类和泛型方法 泛型是Java语言中实现程序多态的一种重要方法,泛型多用于底层代码中,以此来保证代码的通用型。今...

  • Java基础之泛型

    一些术语 参数化类的类型(parameterized type):含有类型参数的类型,例如List 原生态类型(r...

  • JAVA基础之泛型

    1、为什么引入泛型 bug是编程的一部分,我们只能尽自己最大的能力减少出现bug的几率,但是谁也不能保证自己写出的...

网友评论

      本文标题:Java基础之<泛型>

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