zoukankan      html  css  js  c++  java
  • Java泛型

    Java泛型

    在JDK1.5之前只能把元素类型设计为Object,JDK1.5后使用泛型,指定泛型参数的模型。

    1.泛型在集合中的使用

    如果在List不使用泛型,在List添加多种类型,使用Object对象进行读取,如果进行强转会出现错误。

    @Test
        public void GenericListTest()
        {
            List list = new ArrayList();
            list.add("123");
            list.add(123);
            Iterator iterator = list.iterator();
            while(iterator.hasNext())
            {
                String next = (String) iterator.next();//因为list有Integer类型,强转会报错
                System.out.println(next);
            }
        }
    

    所以在Java5.0中新增泛型,可以在创建集合时指定相应的泛型,在使用集合相关方法时候,必须使用指定类型.

    ArrayList<String> list1 = new ArrayList<>();//后面<>里面的类型可以省略
            list1.add("123");
            Iterator<String> iterator1 = list1.iterator();
            while(iterator1.hasNext())
            {
                System.out.println(iterator1.next());
            }
    

    2.泛型类、泛型接口、泛型方法

    2.1泛型类、泛型接口

    创建一个泛型类Person

    package com.cwstd.generic;
    
    public class PersonGeneric<T> {
    
        private String name;
        private T type;
        public PersonGeneric(String name,T type)
        {
            this.name=name;
            this.type=type;
    
        }
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public T getType() {
            return type;
        }
    
        public void setType(T type) {
            this.type = type;
        }
    
    }
    

    在创建一个Student类继承Person类
    注意:继承的时候可以指明泛型的类型,也可以延续父类的泛型

    public class Student extends PersonGeneric<String>{//继承时候指定泛型的类型
    
        public Student(String name, String type) {
                super(name, type);
        }
    }
    

    泛型接口与泛型类的使用方法相同,区别就是一个是接口,一个是类。声明的泛型T,可以在定义泛型接口中使用。

    2.2泛型方法

    创建一格泛型方法,将泛型数组array1复制泛型数组array上

    public <E> E [] copy(E [] array,E [] array1)
        {
            array=array1;
            return array;
        }
    

    注意:

    • 不是引用了泛型类的泛型参数就是泛型方法,需要在方法上定义了自己的泛型变量,而且需要在方法前加上<泛型>。
    • 使用类的泛型的方法,前面不能加上static,成为静态方法。(调用方法前,需要指明类的泛型变量,而静态方法可以直接调用)

    3.泛型在继承上的体现

    如果有两个类A(父类)B(子类):
    对象G < A > 与 G < B >不能互相赋值,但是对象A < G > 与 B < G > 则可以互相赋值。

    List<Object> objects = new ArrayList<Object>();
            List<String> strings = new ArrayList<>();
            objects=strings;//错误
    
  • 相关阅读:
    Python学习32天(socket、tcp协议)
    Python学习第31天(异常、异常捕捉)
    Python之旅的第30天(过程记录,选课系统的基本实现)
    Python之旅的第29天(property补充、元类和自定义元类)
    Python之旅的第28天(描述符、类的装饰器)
    Python之旅的第27天(复习、习题实现、__enter__、__exit__)
    Python之旅第26天(__slots__等内置方法、软件开发规范)
    假期第二周
    假期第一周
    第十六周学习进度博客
  • 原文地址:https://www.cnblogs.com/cwstd/p/14748156.html
Copyright © 2011-2022 走看看