美文网首页
十九、泛型

十九、泛型

作者: 你的益达233 | 来源:发表于2020-02-03 16:20 被阅读0次

    泛型

    作用:可以解决数据类型的安全性问题
    怎么说呢,所有类都可以向上转型为Object,但是真正用的时候就可以类型转错了。但是如果定义泛型就不会有这个问题。
    比如Point《String》 p = new Point《String》()
    这样只能输入字符串类型

    泛型类定义格式

    class 类《T》 {
    修饰符 《T》 属性;
    public 《T》 getter() ;

    }

    通过构造方法设置内容

    class Point<T> {  
        private T var  
        public Point(T var){  
            this.var = var
        }
    
    }
    

    定义多个泛型

    class Point<T,K>{    
        private T var;
        private K key;
    }  
    

    泛型的安全警告

    在泛型应用中最好在声明类对象的时候指定好其内部的数据类型
    如“Info<String>”,如果未指定泛型,会将T设置为Object类型,这样就可以接受所有类型

    通配符?

    使用?可以接收任意的内容,但是此内容却无法修改
    示例代码:

    Info<?> i = new Info<String>()  
    i.setVar("nihao") //会报错  
    

    受限泛型,方法和类都可以使用

    《T extends Info》 :只能是Info或者其子类

    泛型与子类继承的限制

    一个类的子类可以通过对象多态性,为其父类实例化,但是在泛型操作中,子类的泛型类型是无法使用父类的泛型类型接受。
    例如:Info<String>不能使用Info<Object>
    假设Info<String>是一件商品,Info<Object>是全部商品

    泛型其他应用

    泛型接口的定义

    interface Info<T> {
        public T getVar()
    }
    

    泛型接口实现的两种方式

    第一种: 示例代码

    class InfoImpl<T> implements Info<T>{
    
    }
    

    第二种:

    class InfoImpl implements Info<String>{
    }
    

    泛型方法

    跟类是不是泛型类没关系
    示例代码:

    class Demo{  
        public <T> T fun(T t){
            return t;
        }
    }  
    <T>可以看着声明T是什么  
    

    通过泛型方法返回泛型类的实例

    public static <T extends Number> Info<T> fun(){
        Info<T> temp = new Info<T>()
        temp.setVar(param)
        return temp
    }
    

    泛型数组

    public static <T> void fun2(T param[]){
        for(T t:param){}
    }  
    

    使用 fun2(Integer i[])

    泛型的嵌套使用

    Demo<Info<String,Integer>> d = null
    Info<String,Integer> i = null
    i = new Info<String,Integer>("wold",11)
    d = new Demo<Info<String,Integer>>(i)

    相关文章

      网友评论

          本文标题:十九、泛型

          本文链接:https://www.haomeiwen.com/subject/yqnhxhtx.html