美文网首页
【泛型】通配符与嵌套

【泛型】通配符与嵌套

作者: 秀叶寒冬 | 来源:发表于2020-03-02 11:47 被阅读0次

上一篇 【泛型】泛型的作用与定义

1 泛型分类

泛型可以分成泛型类、泛型方法和泛型接口

1.1 泛型类

一个泛型类(generic class)就是具有一个或多个类型变量的类。定义一个泛型类十分简单,只需要在类名后面加上<>,再在里面加上类型参数:

//泛型类
public class MyDemo<T>{
    private T value;
    public MyDemo(T value){
        this.value = value;
    }
    public T getValue(){
        return value;
    }
    public void setValue(T value){
        this.value = value;
    }
}
//泛型类使用
public static void main(String[] args) throws ClassNotFoundException{
    MyDemo<String> demo = new MyDemo("Hello");
    String str = demo.getValue();
    System.out.println(str);
    demo.setValue("hi");
    str = demo.getValue();
    System.out.println(str);
}

1.2 泛型方法

泛型方法表达方式如下:

[权限修饰词] <T1,T2,...,Tn> methods(/*...*/) {/*...*/}

尖括号内表示类型参数列表,即方法变量的类型

/**
 *android studio的test包下
 */
public class TestDemo {
    @Test
    public void should_return_value_when_get_with_params(){
        String str = get("Hello","world");
        Assert.assertEquals("the str should be equals to Hello","Hello",str);
        
       int num = get(123,"Hello");
       Assert.assertEquals("num should be equals to 123","123",num);
    }
    public static <T, U> T get(T t, U u) {
        if (u != null)
            return t;
        else
            return null;
    }
}

1.3 泛型接口

interface Show<T,U>{
    void show(T t,U u);
}
 
class ShowTest implements Show<String,Date>{
    @Override
    public void show(String str,Date date) {
        System.out.println(str);
        System.out.println(date);
    }
}

2 通配符

通配符表示为:?

  • T、K、V、E等泛型字母称为有“有类型”,类型具体使用时而定。
  • ?为未知类型,类型参数不确定,可以是任意类型。只能用在声明类型、方法参数上,不能用在定义泛型类上
package generic;

import java.util.ArrayList;
import java.util.List;
/**
 * ? -->通配符,类型不确定,用于声明 变量|形参 上
 * 不能用在:
 * 1,创建对象
 * 2,创建泛型类 、泛型方法、泛型接口上
 *
 */
public class WildcardTest {

    public static void main(String[] args) {
        //声明
        List<?> list = new ArrayList<Integer>();
        list = new ArrayList<String>();
        list = new ArrayList<Object>();
        
        test(list);
        //编译错误,不能创建对象
//        list = new ArrayList<?>();
    }
    
    public static void test    (List<?> list){
        
    }
    //?不能用在泛型方法上
    /*public static <?> void test2(List<?> list){
        
    }*/
    //?不能创建泛型类
    /*class Test<?>{
        
    }*/
}

3 泛型嵌套

泛型嵌套很常见,如:

List<Map<String,Integer>> list;
 //HashMap
        Map<String,String> map = new HashMap<String,String>();
        map.put("a", "老大");
        map.put("b", "老二");
        
        Set<Entry<String, String>> entrySet = map.entrySet();
        for (Entry<String, String> entry : entrySet) {
            System.out.println(entry.getKey() +"--->"+ entry.getValue());
        }

下一篇 【泛型】泛型上下边界

相关文章

  • 【泛型】泛型上下边界

    上一篇 【泛型】通配符与嵌套通配符可以是任意类类型,在实际业务中使用通配符时,可能会遇到很多安全问题,如传入的泛型...

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

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

  • 泛型 - 通配符与嵌套

    通配符与嵌套 通配符 为什么使用通配符,比如有个打印方法根据Key打印Value如下示例,在使用showKeyVa...

  • 【泛型】通配符与嵌套

    上一篇 【泛型】泛型的作用与定义 1 泛型分类 泛型可以分成泛型类、泛型方法和泛型接口 1.1 泛型类 一个泛型类...

  • 泛型

    普通类的多态 对泛型,是没有多态的 利用通配符,可以实现上面想实现的功能 泛型的嵌套 没有泛型数组,用通配符可以去...

  • Java泛型

    1. 泛型通配符与PECS 为什么要使用泛型通配符和边界 List泛型转换需要用到通配符 ? “装A的List” ...

  • Java 泛型

    泛型类 例如 泛型接口 例如 泛型通配符 泛型方法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型上下边...

  • 深入Java泛型,通配符与嵌套

    上一节: 架构师筑基必备技能:深入Java泛型,泛型的作用与定义 本文作者:我俩绝配本文出处:博客园原文链接:ht...

  • Android 学习(一):Java 泛型

    Java泛型学习 1.0 泛型常用案例 2.0 泛型方法 3.0 泛型类 4.0 通配符 ? 通配符,占位符,标识...

  • Kotlin泛型方法

    泛型约束 泛型通配符

网友评论

      本文标题:【泛型】通配符与嵌套

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