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

博客对Java中使用数据结构时指定泛型进行梳理,主要涉及泛型接口、泛型方法和泛型类的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

泛型接口

泛型方法

泛型类

package javabasis.fanxing;


//参考文章
//https://blog.youkuaiyun.com/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;
    }
}



转载于:https://www.cnblogs.com/yaoxublog/p/10944597.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值