泛型类,泛型方法,泛型接口

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

泛型接口

泛型方法

泛型类

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;
    }
}




posted @ 2019-05-29 16:30  生画微机  阅读(451)  评论(0)    收藏  举报