• 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;//错误
    
  • 相关阅读:
    Rust 常见集合
    Rust模块
    Rust包和crate以及模块
    Rust枚举和模式匹配
    React Native滚动到指定位置
    三行代码让你的React/RN应用动起来
    React Native添加自定义全局组件
    MAC下网易MuMu模拟器调试ReactNative
    解决React Navigation goBack()无效
    “Mac应用”已损坏,打不开解决办法
  • 原文地址:https://www.cnblogs.com/cwstd/p/14748156.html
Copyright © 2020-2023  润新知