Java泛型中有三种通配符

1、<? extends xxx>子类界定

2、<? super xxx>超类界定

3、<?>无限定

1、<? extends xxx>子类界定

package com.zjh.test;

import java.io.Serializable;

import com.zjh.test.model.Animal;
import com.zjh.test.model.Horse;
import com.zjh.test.model.LittleHorse;

public class Pair {

public static <T extends Comparable & Serializable> Animal<T> getAnimal(
            T[] t) {
        T min = t[0];
        T max = t[0];
        for (int i = 1; i < t.length; i++) {
            T key = t[i];
            if (min.compareTo(key) > 0) {

min = key;
            }

if (max.compareTo(key) < 0) {

max = key;
            }
        }
        Animal animal = new Animal<T>(min, max);

return animal;
    }

public static <T extends Comparable & Serializable> String getName(T t) {

return t.toString();

}

public static String getHorseName(Animal<? extends Horse> a) {

return a.getBigger().toString();

}

public static void main(String args[]) {

// Animal animal = getAnimal(new String[] { "zjh", "zcx", "llj", "zst",
        // "lly" });
        // System.out.println(animal.toString());
        //
        // getName(animal);
        LittleHorse lh1 = new LittleHorse("zjh", 26);
        LittleHorse lh2 = new LittleHorse("llj", 27);
        Animal<LittleHorse> animal = new Animal<LittleHorse>(lh1, lh2);
        System.out.print(getHorseName(animal));

}

}

package com.zjh.test.model;

import java.io.Serializable;

public class Animal<T extends Comparable & Serializable> {

@Override
    public String toString() {
        // TODO Auto-generated method stub
        String s = "minName:" + t1.toString() + ",maxName:" + t2.toString();
        return s;
    }

public T getBigger(){
        
        if(t1.compareTo(t2) > 0 ){
            
            return t1;
            
        }else{
            return t2;
        }
    }
    private T t1;
    private T t2;

public Animal() {
        t1 = null;
        t2 = null;
    }

public Animal(T t1, T t2) {

this.t1 = t1;
        this.t2 = t2;
    }

}

2、超类限定

与子类限定,直观解释来说,子类限定的通配符用来从入参中读取信息,而父类限定的通配符用来写入代码执行结果信息。

从限定上来说,子类限定时,入参必须是限定类的子类泛型,而父类则是限定类的父类。

public static Animal<? super LittleHorse> getHorse(LittleHorse[] t,
            Animal<? super LittleHorse> a) {
        LittleHorse min = t[0];
        LittleHorse max = t[0];
        for (int i = 1; i < t.length; i++) {
            LittleHorse key = t[i];
            if (min.compareTo(key) > 0) {

min = key;
            }

if (max.compareTo(key) < 0) {

max = key;
            }
        }

a.setT1(min);
        a.setT2(max);
        return a;
    }

public static void main(String args[]) {

// Animal animal = getAnimal(new String[] { "zjh", "zcx", "llj", "zst",
        // "lly" });
        // System.out.println(animal.toString());
        //
        // getName(animal);
//        LittleHorse lh1 = new LittleHorse("zjh", 26);
//        LittleHorse lh2 = new LittleHorse("llj", 27);
//        Animal<LittleHorse> animal = new Animal<LittleHorse>(lh1, lh2);
//        System.out.print(getHorseName(animal));
    
        LittleHorse lh1 = new LittleHorse("zjh", 26);
        LittleHorse lh2 = new LittleHorse("llj", 27);
        LittleHorse lh3 = new LittleHorse("zcx", 25);
        LittleHorse lh4 = new LittleHorse("zst",10);
        LittleHorse [] s = new LittleHorse[]{lh1,lh2,lh3,lh4};
        Horse t1 = new Horse();
        Horse t2 = new Horse();
        Animal<Horse> animal = new Animal<Horse>(t1, t2);
        //可以编译
        Animal<?> animal2 = getHorse(s,animal);
        System.out.println(animal2.getBigger().toString());
        LittleHorse lt1 = new LittleHorse();
        LittleHorse lt2 = new LittleHorse();
        Animal<LittleHorse> animal_test = new Animal<LittleHorse>(lt1, lt2);
    //无法编译
        //getHorse(animal_test);
    }

3、<?>无限定

Java泛型入参的三种通配符使用相关推荐

  1. 转list_你知道Java数组转List的三种方式及对比吗?

    前言: 本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析. 一.最常见方式(未必最佳) 通过 Arrays.asList(strArray ...

  2. Java 数组转 List 的三种方式及对比

    来源 | blog.csdn.net/x541211190/article/details/79597236 本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的 ...

  3. Java数组转List的三种方式及对比

    前言: 本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析. 一.最常见方式(未必最佳) 通过 Arrays.asList(strArray ...

  4. Java校验入参之正则表达式校验特殊字符

    Java校验入参之正则表达式校验特殊字符 前言 实现流程 总结 参考链接 前言 场景描述 第三方调用接口时,有些特殊字符不允许传参,可能影响存储.或者加解密等问题,下面以斜杠"/" ...

  5. 【零基础学Java】—this关键字的三种用法+Java继承的三个特点(二十一)

    [零基础学Java]-this关键字的三种用法+Java继承的三个特点(二十一) 一.this关键字的三种用法 在本类的成员方法中,访问本类的成员变量 在本类的成员方法中,访问本类的另一个成员方法 在 ...

  6. Java中List集合的三种遍历方式(全网最详)

    Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...

  7. vue路由传参的三种方式/含页面刷新参数丢失解决方案(详细)

    vue路由传参的三种方式以及页面刷新参数丢失问题 一.路由传参的三种方式 1.传参方式一:params传参 2.传参方式二:路由属性配置传参 3.传参方式三:query传参 二.三种传递方式的区别 一 ...

  8. java循环控制语句,简述Java流程控制语句中的三种循环控制语句,并描述下它们的区别。...

    简述Java流程控制语句中的三种循环控制语句,并描述下它们的区别. 答:for语句,构建确定循环次数的循环结构 while语句,通常构建不确定循环次数的循环结构 do-while语句,通常构建不确定循 ...

  9. Vue:路由传参的三种方式

    文章目录 前言 方式一:params 传参(显示参数) 1.声明式 router-link 2.编程式 this.$router.push 方式二:params 传参(不显示参数) 1.声明式 rou ...

最新文章

  1. LibLinear(SVM包)使用说明之(一)README
  2. mysql连接报错:The server time zone value ‘Öйú±ê׼ʱ¼ä‘ is unrecognized or represents more than one time
  3. new JSONArray(ListMap).tostring()问题
  4. 微信小程序 - 基础 - 003 - WEUI - 基本表单组件 - form - 页面数据提交和获取 - 01
  5. 用计算机谈过火,央视电视文化中心过火网架的复建关键技术研究
  6. docker php安装gd扩展_PHP安装AMQP扩展
  7. 密码学中的一些数学基础
  8. python基础:sys模块
  9. r语言和python哪个难学_明明R语言比python容易学的多,为什么还有那么多人说R语言学起来陡峭?...
  10. 海康 hikvision SDK 初始化、登录、布防、监听
  11. ALG:应用层网关(防火墙)
  12. 将使用Tkinter编写的带图片的程序打包成exe文件,并且实现图片内嵌
  13. u盘安装成功计算机里找不到文件夹,插上U盘后,显示成功安装设备驱动程序,但是磁盘里不显示优盘...
  14. 内大计算机学院研究生奖学金,计算机学院2020级硕士研究生学业奖学金评审结果公示...
  15. plc控制伺服电机 四轴攻丝机案例(包含伺服接线图)
  16. 学习如何利用docker建立容器,然后用fastqc分析数据
  17. html 文字两边加横线\竖线\ Css3中间文本两侧横线
  18. Symbiosis(共生)和Commensalism(共栖)的区别
  19. 刷问卷星调查问卷_如何通过回答快速调查问卷从Google获得免费资金
  20. 移动端加载MVT矢量瓦片

热门文章

  1. Chrome浏览器如何设置打开时显示上次未关闭的网页
  2. linux下cp -pf,Linux下cp直接覆盖
  3. 2021年五月节日活动营销指导方案
  4. 创新案例分享 | 建设交通运输管理信息系统,全面提升执法能力
  5. 中医教你怎么睡好觉,睡个养生觉!
  6. RW 搜索ACPI协议RSD PTR表
  7. Python画图常用代码总结,这20个画图代码现拿现用
  8. 从ChatGPT的火爆回忆6年前的硅谷之行
  9. CRT、PUTTY连接华为ensp
  10. 常态化防疫下,一种校园进出防疫管理系统模板来了