zoukankan      html  css  js  c++  java
  • 泛型类,泛型方法,泛型接口

    之前都是 使用过 数据结构,指定泛型 , 今天做个梳理

    泛型接口

    泛型方法

    泛型类

    package javabasis.fanxing;
    
    
    //参考文章
    //https://blog.csdn.net/s10461/article/details/53941091
    //码出高效
    
    import org.junit.Test;
    
    
    //泛型  (参数化类型)
    //主要用于 非固定类型参数 的传入传出, 在编译器 能有效对类型进行校验,避免再运行期
    
    /*
    *
    * 主要有三种方式使用
    *
    * 方法泛型
    * 接口泛型
    * 类泛型
    *
    * 以下为使用例子及描述
    * */
    
    
    //泛型方法
    /*
    * 泛型方法的使用
    *
    * 主要是 可以接收多种类型参数,也返回此种类型参数
    *
    * 如果声明入参为Object 出参为Object的话,也可以实现,但是接收时需要强制类型转换
    *
    * */
    
    
    class FanXing {
    
        public Integer deal(Integer i) {
            return i;
        }
    
        public Object newDeal1(Object o) {
            return o;
        }
    
        //此处的<T>  才是泛型方法声明
        public <T> T newDeal2(T t) {
            return t;
        }
    }
    
    
    public class NO3FanXing {
    
        //泛型方法
        @Test
        public void test() {
    
            Integer i = 1;
            Double j = 0.11;
    
            FanXing fanXing = new FanXing();
            Integer result1 = fanXing.deal(i);
            //fanXing.deal(j);会报异常
    
            //需要强制类型转换,不安全,容易出现异常
            Double result2 = (Double) fanXing.newDeal1(j);
    
            //不需要强制类型转换
            Double result3 = fanXing.newDeal2(j);
        }
    
    
    }
    
    //-------------------------------------------------------
    
    
    /*泛型类使用*/
    
    
    /*
    * 此处声明为 泛型类, T指代各种类型,  K V E T都可以
    * */
    class FanXingClassDemo<T> {
    
        private T param;
    
        public FanXingClassDemo(T param) {
            this.param = param;
        }
    
        //此处的T  非泛型方法, 仅仅是根据 泛型类定义的泛型进行操作
        public T getParam() {
            return param;
        }
    
        public void setParam(T param) {
            this.param = param;
        }
    
    
        @Test
        public void test() {
    
            FanXingClassDemo<Integer> fanXingClassDemo = new FanXingClassDemo<Integer>(4545);
    //        fanXingClassDemo.setParam("dsfasdfsf");
            // 抛出异常: 'setParam(java.lang.Integer)' in 'javabasis.fanxing.FanXingClassDemo' cannot be applied to '(java.lang.String)'
            //实现对放入参数类型做校验
    
            FanXingClassDemo<String> fanXingClassDemo2 = new FanXingClassDemo<String>("dsfasdfsf");
            //放入其他类型,需要重新制定泛型类型
    
    
            //想要实现 父类子类之间的 泛型类型制定, 可以使用通配符,会单独进行整理
        }
    }
    
    
    //--------------------------------------------------------------
    
    
    /*
    *
    * 泛型接口的使用
    * 在实现类中有两个用法
    *
    */
    
    interface FanXingInterFace<T> {
    
        public T getParam();
    
        public T setParam();
    
    }
    
    
    //注意此处  后边也要写<T>,是一个泛型类
    class FanXingInterFaceImpl<T> implements FanXingInterFace<T> {
    
        @Override
        public T getParam() {
            return null;
        }
    
        @Override
        public T setParam() {
            return null;
        }
    }
    
    //注意此处不用再进行声明<T>, 接口中已经指定了泛型类型
    class FanXingInterFaceImpl2 implements FanXingInterFace<String> {
    
        @Override
        public String getParam() {
            return null;
        }
    
        @Override
        public String setParam() {
            return null;
        }
    }
    
    
    
    
    
  • 相关阅读:
    github提交代码403
    针对七牛含有特殊字符的文件名,对特殊字符编码处理
    去除字符串所有空格
    按关键词匹配度排序
    服务器监控-Zabbix
    数据同步
    字符串-占位符
    Redis序列化
    Redis监听回调
    时间计算
  • 原文地址:https://www.cnblogs.com/yaoxublog/p/10944597.html
Copyright © 2011-2022 走看看