深入java泛型二通配符与嵌套(代码片段)

持续学习刻意练习 持续学习刻意练习     2022-12-05     623

关键词:

第一章深入Java泛型

二、通配符与嵌套

2.1 通配符

?:表示类型不确定,只能用于声明变量或者形参上,不能用在创建泛型类、泛型方法和接口上。

public static void main(String[] args) 
    List<?> list = new ArrayList<Integer>();
    list = new ArrayList<String>();
    test(list);


public static void test(List<?> list) 

? 号通配符表示可以匹配任意类型,任意的 Java 类都可以匹配。

在使用 ? 号通配符的时候:只能调用对象与类型无关的方法,不能调用对象与类型有关的方法。

2.2 泛型嵌套

定义两个泛型类,Myclass 类的泛型就是 student 类,而 student 类的发逆行是 String 类。

class Student<T> 
    private T score;
    
    public T getScore() 
        return score;
    

    public void setScore(T score) 
        this.score = score;
    


class MyClass<T> 
    private T cls;


    public T getCls() 
        return cls;
    


    public void setCls(T cls) 
        this.cls = cls;
    


public static void main(String[] args) 
    Student<String> stu = new String<String>();
    stu.setScore("great");
    // 嵌套泛型
    MyClass<Student<String>> cls = new MyClass<Student<String>>();
    cls.setCls(stu);
    Student<String> stu2 = new Student<String>();
    stu2 = cls.getCls();
    System.out.println(stu2.getScore());// great

如上就实现了泛型的嵌套,在 HashMap 中对键值对进行遍历的时候,也利用了泛型的嵌套。

public static void main(String[] args) 
    Map<String, String> map = new HashMap<>(String, String);
    map.put("a", "java300");
    map.put("b", "马士兵javase");

    Set<Entry<String, String>> entrySet = map.entrySet();
    for(Entry<String, String> entry: entrySet) 
        String key = entry.getKey();
        String value = entry.getValue();
    

2.3 通配符和泛型方法

大多时候,我们都可以使用泛型方法来代替通配符的。

// 使用通配符
public static void test(List<?> list) 

// 使用泛型方法
public <T> void test2(List<T> t)

上面这两个方法都是可以的,那么问题来了,我们使用通配符还是使用泛型方法呢?

原则:

  • 如果参数之间的类型有依赖关系,或者返回值是与参数之间有依赖关系的,就使用泛型方法
  • 如果没有依赖关系的,使用通配符,通配符会更灵活一些

深入java泛型(三泛型的上下边界)(代码片段)

...入Java泛型三、泛型的上下边界3.1<?extendsE>:上界通配符(UpperBoundsWildcards)3.2<?superE>:下界通配符(LowerBoundsWildcards)3.3上下通配符的副作用三、泛型的上下边界?extendE是泛型的上边界,?superT是... 查看详情

大数据必学java基础(五十五):泛型深入了解(代码片段)

...泛型接口2、泛型方法3、泛型参数存在继承关系的情况4、通配符5、使用通配符后的细节6、泛型受限泛型深入了解一、引入1、什么是泛型(Genericÿ 查看详情

java泛型概述与应用(代码片段)

...1.3泛型方法1.3.1示例代码1.4泛型接口1.4.1示例代码1.5类型通配符1.5.1类型通配符:<?>1.5.2类型通配符上限:<?extends类型>1.5.3类型通配符下限:<?super类型>1.5.4泛型通配符的使用泛型1.1泛型概述泛型是JDK5中引入的特性,它... 查看详情

深入理解java泛型协变逆变泛型通配符自限定(代码片段)

...的应用,解答了许多比较难的问题。纯函数协变逆变泛型通配符PECS法则自限定Part1:协变与逆变Java8引入了函数式接口,从此方法传参可以传递函数了,有人说这是语法糖。实际上,这是编程范式的转换,思想体系的变化。一、纯... 查看详情

java泛型

...属性/字段,此时可以将该类作成泛型类6)如果使用泛型通配符,只能获取与泛型具体类型无关的信息,例如:长度。7)有二个类 查看详情

java-泛型通配符?与t的区别(代码片段)

之前对Java的泛型不太熟悉,没怎么搞明白通配符?的使用,以及?与T的区别,导致一直懵懵懂懂,也不太敢用。网上找了一大堆解释文章,都没有怎么讲清晰,最后发现是Java官方的教程《Lesson:Gene... 查看详情

java中的泛型t与通配符?概念入门(代码片段)

使用泛型的目的是利用Java编译机制,在编译过程中帮我们检测代码中不规范的有可能导致程序错误的代码。例如,我们都知道List容器可以持有任何类型的数据,所以我们可以把String和Integer等类型同时放入同一个List容器中,但... 查看详情

java基础:泛型的具体介绍与使用(代码片段)

...求三:四、泛型在继承上的体现4.1、案例演示:通配符一、通配符的使用1、代码演示2、案例演示二:3、注意事项二、有限制的通配符1、代码演示三、泛型应用举例1、泛型的嵌套(代码演示)2、实际案例3、... 查看详情

深入java泛型一泛型的作用与定义(代码片段)

第一章深入Java泛型一、泛型的作用与定义1.1泛型的作用1.2泛型的定义1.3泛型擦除一、泛型的作用与定义1.1泛型的作用使用泛型能写出更加灵活通用的代码。泛型的设计主要参照了C++的模板,旨在能让你写出更加通用化&... 查看详情

java中泛型的深入理解(代码片段)

...本介绍自定义泛型类自定义泛型方法自定义泛型接口泛型通配符和上下限泛型深入泛型基本介绍泛型的概述:泛型:是JDK5中引入的特性,可以在编译阶段约束操作的数据类型,并进行检查。泛型的格式:<数据类... 查看详情

java的泛型---(英雄联盟集合嵌套案例)(代码片段)

...什么会有泛型呢?泛型泛型类泛型方法泛型接口泛型通配符?extendsE?superE增强for泛型类的测试 泛型方法的测试 泛型接口的测试集合的嵌套遍历 案例一案例二 集合嵌套案例(英雄联盟案例)Java的泛型JDK1.5以后出现... 查看详情

你了解泛型通配符与上下界吗?(代码片段)

...新集合类框架中。今天我们主要说如下内容:泛型的背景通配符以及上下界泛型及通配符的使用场景为什么使用泛型及背后的问题?我们来看一下官方的说法:Strongert 查看详情

你了解泛型通配符与上下界吗?(代码片段)

...新集合类框架中。今天我们主要说如下内容:泛型的背景通配符以及上下界泛型及通配符的使用场景为什么使用泛型及背后的问题?我们来看一下官方的说法:Strongert 查看详情

操作java泛型:泛型在继承方面体现与通配符使用

一、泛型在继承上的体现  1、先看两段代码有何不同    片段1:1  publicvoidprintCollection(Collectionc){2Iteratori=c.iterator();3for(intk=0;k<c.size();k++){4System.out.println(i.next());5}6}        片段2: 1  publi 查看详情

java重点--泛型(代码片段)

...用含有泛型的方法✨定义和使用含有泛型的接口✨泛型的通配符✨通配符的高级使用--受限泛型✨斗地主小案例💖泛型的概念泛型是一种未知的数据类型,当我们不知道使用什么数据类型的时候,可以使用泛型,... 查看详情

你真的懂java泛型吗(代码片段)

...t=newArrayList<Apple>();//无法通过编译但我们可以使用通配符来解决ArrayList<?extendsFruit>flist=newArrayList<Apple>();//使用通配符解决协变问题通配符上界通配符List<?extendsFruit>flist=Arrays.asList(newApple());Applea=(Apple)f... 查看详情

java示例代码_将集合和泛型与通配符一起使用

java示例代码_将集合和泛型与通配符一起使用 查看详情

深入java泛型(四rxjava中深入理解泛型)(代码片段)

第一章深入Java泛型四、RxJava中深入理解泛型4.1响应式编程4.2观察者模式4.3RxJava是对观察者模式的一种高级运用,或者说是一种升级,它把观察者模式具体化,更加明确了各个对象之间的关系四、RxJava中深入理解泛型4.... 查看详情