重拾Java泛型

本文详细探讨了Java泛型的各个方面,包括泛型类和泛型接口的定义、泛型方法、限定类型变量、泛型约束、局限性、继承规则以及通配符类型的应用。通过阅读,读者可以深化对Java泛型的理解。
摘要由CSDN通过智能技术生成

目录

1.泛型类和泛型接口的定义

2.泛型方法的辨析

3.限定类型变量

4.泛型中的约束 

5.泛型中的局限性 

6.泛型类型的继承规则

7.通配符类型


1.泛型类和泛型接口的定义

/**
 * 为什么我们需要泛型
 * 提高可读性
 * 使 ClassCastException 这种错误在编译期就检测出来
 * 适用于多种数据类型执行相同的代码(代码复用)
 * <p>
 * 1.泛型类和泛型接口的定义
 * <T> 泛型类型 接口 方法标识也是声明前提 里面可以是T,V,K,E比较常用,未作特殊要求
 */
public class Main {
    public int addInt(int x, int y) {
        return x + y;
    }

    public float addFloat(float x, float y) {
        return x + y;
    }

    public double addDouble(double x, double y) {
        return x + y;
    }

    // 一个泛型方法
    private static <T extends Number> double add(T a, T b) {
        return a.doubleValue() + b.doubleValue();
    }


    @Test
    public void mainTest() {
        System.out.println(addInt(1, 1));
        System.out.println(addFloat(1f, 1f));
        System.out.println(addDouble(1d, 1d));
        //我们发现,当累加的时候需求并不是单一,这时传入不同的数据类型继而重写多个方法,这样的代码显得很冗余

        //那么使用泛型就可以操作 int、float、double 类型,用一个泛型方法就实现了上面三个重载方法的功能。
        System.out.println(add(1, 2));
        System.out.println(add(1f, 2f));
        System.out.println(add(1d, 2d));

        //使用泛型类
        NormalGeneric<String> stringNormalGeneric = new NormalGeneric<String>();
        stringNormalGeneric.setData("OK");
        System.out.println(stringNormalGeneric.getData());
    }

    /**
     * 泛型类
     *
     * @param <T>
     */
    static class NormalGeneric<T> {
        private T data;

        public NormalGeneric(T data) {
            this.data = data;
        }

        public NormalGeneric() {
        }

        public T getData() {
            return data;
        }

        public void setData(T data) {
            this.data = data;
        }
    }


    /**
     * 泛型接口
     */
    public interface IGeneric<T> {
        T next();
    }

    /**
     * 实现泛型接口 传入任意类型
     *
     * @param <T>
     */
    class ImplGeneric1<T> implements IGeneric<T> {

        @Override
        public T next() {
            return null;
        }
    }

    /**
     * 实现泛型接口 传入String指定类型
     *
     * @param <T>
     */
    class ImplGeneric2<T> implements IGeneric<String> {

        @Override
        public String next() {
            return null;
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值