Java基础 -> 泛型<E e>

 /**
     * 泛型:ArrayList<String>:<>,里面是什么类型的,add就只能添加该类型的;
     *          必要是一个类,不能是基本数据类型(int),要用包装类integer;
     *      public class ArrayList<E> extends AbstractList<E>;
     *          ArrayList<Object>:就是所有类型的了;
     */
    @Test
    public void tset2(){
        ArrayList<String> stringArrayList = new ArrayList<>();
        stringArrayList.add("asd");
        stringArrayList.add("qwe");
        //java: 不兼容的类型: int无法转换为java.lang.String
        //stringArrayList.add(12);报错
        System.out.println(stringArrayList);//[asd, qwe]
        //遍历1:
        //iterator:一开始new的时候指定了类型,之后都是该类型的;
        Iterator<String> iterator = stringArrayList.iterator();
        while (iterator.hasNext()){
            System.out.print(iterator.next() + "\t");//asd	qwe
        }
        System.out.println();
        //遍历2:
        for (Object obj : stringArrayList){
            System.out.print(obj + "\t");//asd	qwe	
        }
    }
/**
     * 泛型:Map:HashMap<integer,String>(),同List
     */
    @Test
    public void test3(){
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "11");
        map.put(2, "22");
        map.put(3, "33");
        //java: 不兼容的类型: java.lang.String无法转换为java.lang.Integer
        //map.put("3", "33");
        //遍历1:
        Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
        Iterator<Map.Entry<Integer, String>> iterator = entrySet.iterator();
        while (iterator.hasNext()){
            System.out.print(iterator.next() + "\t");//1=11	2=22	3=33
        }
        System.out.println();
        //遍历2:
        for (Object obj : map.entrySet()){
            System.out.print(obj + "\t");//1=11	2=22	3=33
        }

    }

自定义泛型类(接口):

public class Test919<E> {
 @Test
    public void test4(){
        //T为integer类型
        Test919<Integer> test919 = new Test919<>();
        test919.setTest(13);
        System.out.println(test919.getTest());//13
        System.out.println(test919.toString());//Test919{name='null', old=0, test=13}
    }
    /**
     * 自定义泛型类
     */
    public String name = "aaa";
    public int old = 22;
    E test;

    public Test919() {
    }


    public E getTest() {
        return test;
    }

    public void setTest(E test) {
        this.test = test;
    }

    @Override
    public String toString() {
        return "Test919{" +
                "name='" + name + '\'' +
                ", old=" + old +
                ", test=" + test +
                '}';
    }

附加

	 /**
     * 静态方法不能使用泛型,异常类也不能使用
     */
    public static void show(){
        System.out.println(test);//报错
    }
public void shuZu(){
        //不允许这样new数组
        E[] es = new E[];
        
        //正确;强制转换
        E[] e = (E[]) new Object[10];
    }

泛型方法:

    /**
     * 泛型方法:与其他无关,类可以不是泛型,接口是不是泛型都与泛型方法本身无关
     *              可以使用static;
     * 	格式:public <T> class<T> method(T[]/T arr){}
     */
    public static <T> List<T> shuZu(T[] arr){
        ArrayList<T> arrayList = new ArrayList<>();
        for (T t : arr){
            arrayList.add(t);
        }
        return arrayList;
    }

通配符<?>:

        List<Object> list = new ArrayList<>();
        ArrayList<String> list1 = new ArrayList<>();
        //泛型不允许,出现string赋给object:子类赋给父类,都是平级的
        //list = list1;//报错
        ArrayList<String> list2 = new ArrayList<>();
        list1 = list2;
        //通配符:?
        //<?>:是所有泛型的父类,其他泛型都是平级的
        List<?> list3 = new ArrayList<>();
        //list = list3;报错;还是不识别,父泛型不能赋给子泛型
        list3 = list;//可以识别,任何的泛型都可以赋给<?>泛型
        list3 = list1;
        list3 = list2;
        //<?>泛型:缺点,<?>对象只能添加null,其他是如何类型都不允许添加进去了 
        //查
        Object o = list3.get(0);
        //删
        list3.remove(1);

通配符<?>附加:

    /**
     * ? extends Name:<?>只能作用于Name的子类(包含Name):[-无穷,Name]
     * ? super Name:<?>只能作用于Name的父类(包含Name):[Name,+无穷]
     */
    @Test
    public void test5(){
        List<? extends Person> list = null;
        List<? super Person> list1 = null;
        
        List<Student> list2 = null;
        List<Person> list3 = null;
        List<Object> list4 = null;

        list = list2;
        list = list3;
        //list = list4;会报错,Object不是Person的子类
        
        //list1 = list2;会报错,Student不是Person的父类
        list1 = list3;
        list1 = list4;
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值