泛型ggg

泛型:

  • 泛型中不能写入基本数据类型
  • 泛型不具备继承性:泛型里面写什么类型就只能传什么类型,不能因为其中的类型有继承关系就混着用,但是数据具有继承性
  • 泛型可以用通配符,可以在参数中传入一个父子系列,具体看下面
  • 泛型中可以放在类,方法(一般是只有当前方法需要泛型时,就放在上面),接口上;在类上<E>表示类中的所有方法和参数等其他的所有东西都可以是<E>;在方法上时,则参数可以是E
  • 泛型中传参可以是其子类,如果不写<>,那就默认<>中是Object类型
  • 规范、统一集合中的类型:否则存入各种不同的类型时,如果在利用迭代器遍>历的过程中强转成其中一种类型,那么将无法打印:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Test {
    public static void main(String[] args) {
        Collection <Object> coll=new ArrayList<>();
        coll.add(123);
        coll.add("小西巴");
        coll.add("小赤佬");
        Iterator iterator =coll.iterator();
        if (iterator.hasNext()){
            String i=(String) iterator.next();
            System.out.println(i);
        }
    }
}

如果<>中加入了类型,那么将在编译时期就会对一些传入错误的类型的参数进行报错,如add()方法

<e>表示不确定当前的类型,真正调用时,就会变成调用的方法:
先创建一个ArraryList<e>类,再在测试类中写下面

ArraryList<String> aa=new Arrary<>();

第一个大框,第四条(类和方法上)##:

不确定的就写E``F``V等,看测试类写啥, e 等就变成啥

普通的用法:加类,方法上

package com.pojo;

public class Dao <E>{
    Object[] object=new Object[5];
    int size;
    public boolean setObject(E e){
        object[size] =e;
        size++;
        return true;
    }
    public E getObject(int index){
        return (E)object[index];
    }
}

// 测试类写 String  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

public class Test {
    public static void main(String[] args) {
        Dao<String> dao=new Dao();
        Boolean b1=dao.setObject("潇湘");
        Boolean b2=dao.setObject("类阿迪");
        String daoObject=dao.getObject(1);
        System.out.println(daoObject);
    }
}

加方法上的特殊用法:想添加多个参数时:ArrayList<E> list的E表示参数是E型

public<E> void show(ArrayList<E> list,E e1,E e2,E e3){
        list.add(e1);
        list.add(e2);
        list.add(e3);
    }

第一个大框,第四条(接口上):

在这里插入图片描述
方法一:实现类实现了泛型的接口之后,就会在一些set方法中的参数确定下来,测试类创建对象时也不用再写<>,直接就默认是接口泛型的参数:

public class ServiceDao<E>{
      
    }
public class it<String> implements ServiceDao{
      
    }

方法二:把泛型在它的下一任那里继续写着,测试类创建对象的时候再确定,创建对象时写<>如:it<String> dao等等,只要能意思保持和接口一致就行

public class it implements ServiceDao<String>{
      
    }

第一个大框,第二条():

泛型不具备继承性看注释

报错是因为,即使Ye和Fu是继承关系,但是作为泛型参数时,并不会因其继承性而使得泛型内的参数也具有继承性

class Ye{}
class Fu extends Ye{}

public class Test {
    public static void main(String[] args) {
		ArrayList<Ye> list1=new ArrayList<Ye>;
		ArrayList<Fu> list2=new ArrayList<Fu>;
		
		//没问题
		method.(list1);
		//报错 !!!!!!!
		method.(list2);
    }
    
    void method(ArrayList<Ye> list){
    	
    }
}

泛型数据具备继承性

class Ye{}
class Fu extends Ye{}

public class Test {
    public static void main(String[] args) {
		ArrayList<Ye> list=new ArrayList<Ye>;
		
		list.add(new Fu());
		list.add(new Ye());
		
    }
    
    void method(ArrayList<Ye> list){
    	
    }
}

通配符?

<? extends Ye>:所有Ye的子类类型包括Ye都可以传进来
<?super Fu>:所有Fu的父类类型包括Fu都可以传进来

public void show(ArrayList<? extends Ye>  list){}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值