栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java-泛型

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java-泛型

Java-泛型 准备工作: 建一个Order类
public class Order {
    String rderName;
    int orderId;

    T orderT;

    public Order() {
        //编译不通过
        //T[] t=new T[10];
        //编译通过
        T[] t=(T[])new Object[10];
    }

    public Order(String rderName, int orderId, T orderT) {
        this.rderName = rderName;
        this.orderId = orderId;
        this.orderT = orderT;
    }
    public T getOrderT() {
        return orderT;
    }

    public void setOrderT(T orderT) {
        this.orderT = orderT;
    }

    @Override
    public String toString() {
        return "Order{" +
                "rderName='" + rderName + ''' +
                ", orderId=" + orderId +
                ", orderT=" + orderT +
                '}';
    }
    
}
建一个SubOrder类
public class SubOrder extends Order{//不是泛型

}
建一个SubOrder类
public class SubOrder1 extends Order {//仍然是泛型
}
Java泛型注意事项
//异常类不能是泛型的
    @Test
    public void test1(){

        Order order=new Order();
        order.setOrderT("sdjf");
        order.setOrderT(345);
        //建议实例化时指明累的泛型
    }

    @Test
    public void test2(){
        //子类继承带泛型的父类时,指明的泛型类型,则实例化子类对象时,不再需要指明泛型
        SubOrder so=new SubOrder();
        so.setOrderT(123);

        SubOrder1 sob1=new SubOrder1<>();
        sob1.setOrderT("sskksks");
    }

    @Test
    public void test3(){
        //泛型不同的引用不能相互赋值
        ArrayList al1=null;
        ArrayList al2=null;
//        al1=al2;
    }
通配符 准备工作 先建一个Student类
public class Student extends Person{
}
建一Person类
public class Person {
}
通配符注意事项
    @Test
    public void test4(){
        //通配符 ?
        //类A是是类B的父类 G和G是没有关系的二者共同的父类是:G
        List list1=null;
        List list2=null;

        List list=null;

      //  list=list1;
      //  list=list2;

        //编译通过
        //print(list1);

        //不能向G内部添加数据
        List list3=new ArrayList<>();
        list3.add("AA");
        list3.add("BB");
        list3.add("CC");
        list=list3;
        //除了添加null之外
        list.add(null);

        //获取读取数据
        Object o=list.get(0);
        System.out.println(o);

    }

    public void print(List list){
        Iterator iterator=list.iterator();
        while(iterator.hasNext()){
            Object obj=iterator.next();
            System.out.println(obj);
        }
    }

    @Test
    public void test5(){
        //有限制条件通配符的使用
        List< ? extends Person> list1 = null;
        List list2 = null;
        List list3 = new ArrayList();
        List list4 = new ArrayList();
        List list5 = new ArrayList();

        //extends是<=
        list1 = list3;
        list1 = list4;
        //list1 = list5;

        //super是>=
        //list2 = list3;
        list2 = list4;
        list2 = list5;

        //读取数据:
        list1 = list4;
        Person p = list1.get(0);
        //编译不通过
        // Student s=list1.get(0);

        Object obj=list2.get(0);
        //编译不通过
        //Person per=list2.get(0);

        //写入数据
        //编译不通过
        //list1.add(new Student());不能将Student赋给 ? ,因为父类不能向下转型赋给子类

        list2.add(new Person());
        list2.add(new Student());//子类可以向下转型赋给父类
    }


转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号