• java 关于泛型的一些知识点


    public class Generic <T>{
        private T ob;
        public Generic(T ob){
            this.ob=ob;
        }
        public T GetOb(){
            return ob;
        }
        public void setOb(T ob){
            this.ob=ob;
        }
        public void showType(){
            System.out.println("实际类型是:"+ob.getClass().getName());
        }
        public static void main(String[] args) {
            Generic<Integer>intg=new Generic<Integer>(3);
            intg.showType();
            Generic<String>strg=new Generic<String>("sd");
            strg.showType();
            //intg=strg;使用泛型可以避免这种错误的语句出现 因为会报错
        }
    }

    Java中泛型可以实现参数的任意化,根据实例化类时 尖括号内指定的类型   来改变被实例化的类Generic类中参数的类型。

    如果想让定义的泛型类使用指定范围的类型,可以使用extends关键字来进行限制

    public class Generic <T extends Integer>{
        
    }

    如上,Generic<String>g=new Generic<String>("sds");语句将会报错,因为不是Ineteger类型

    如果一个方法的参数是一个不确定类型的参数,那么需要使用通配符<?>来表达即将填入的参数类型不确定,而不是使用<Object>

    public void func(Generic <?>generic){
            //
        }

    如果参数部分写为Generic <Object>generic 那么Generic参数化类型被明确Object参数化类型,那么填入Integer参数化类型的Generic对象会报错

    被通配符限定的类型参数范围,如下:

    public void func(Generic <? extends Number>generic){
            //
        }

    泛型在使用的时候需要注意以下几点:

    1. 泛型类型不能实例化,即不能new T

    2. 不能实例化泛型数组,即不能T[] array=new T[2];

        不能创建一个类型特定的泛型引用的数组,即不能 Gen<String>[] array=new Gen<String>[2];

        但是可以用通配符创建泛型类型的引用数组:Gen<?>[] array=new Gen<?>[2];

    3. 不能用类型参数替换将基本类型

    4. 异常:不能捕获也不能抛出泛型类的异常对象

    5. 不能在静态变量或者静态方法中引用类型参数,即:static T ob;是非法的

  • 相关阅读:
    微信公众号项目部署
    数据库存入年月日时分秒类型时间问题
    路径问题
    常用DOS命令
    解决Maven下载慢的问题
    害人不浅的数学翻译
    Webpack4 踩坑记
    React 踩坑记
    what's the problem of Object oriented programming
    为什么JVM调优?
  • 原文地址:https://www.cnblogs.com/liumaowu/p/8557375.html
Copyright © 2020-2023  润新知