【泛型】通配符与嵌套

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

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());
        }

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

发布了136 篇原创文章 · 获赞 175 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/u013293125/article/details/105411047