Java泛型入门

前言

Java 泛型入门,泛型的含义及实现。

一、泛型

1、含义

1)数据类型参数化,这样就可以一类多用等等。
2)数据类型只能是引用类型,这也是基本数据类型需要包装的便捷之处。

2、实现

用一个占位符替代,可用于类、接口、方法,分别对应于泛型类、泛型接口、泛型方法。
在这里插入图片描述

public class TestGeneric<T1, T2> {
    private T1 a;
    private T2 b;

    public void setA(T1 a) {
        this.a = a;
    }

    public void setB(T2 b) {
        this.b = b;
    }

    public T1 getA() {
        return a;
    }

    public T2 getB() {
        return b;
    }
    //泛型与可变参数
    public <T5> void getArgs(T5... args) {
        for (T5 arg : args) {
            System.out.println(arg);
        }
    }
}
interface Generic<T> {
    T getName();
}

3、好处

1)不用强制转换类,代码可读性更好。如果不使用泛型,则是Object,需要很多instanceof来判断类类型及强制转换,而这个转化过程可能在运行时出错。
2)明确了泛型类型,只要编译通过,则不会出现ClassCastException异常。
注:类型擦除,编译时,会替换成Object,再强转。对于JVM,没有泛型的概念。
3)方便写代码,只要编译时不出错,那么运行时就不会出错,较安全。

二、定义泛型

1、基本定义

1)泛型类

用的时候才确定类型
2)泛型接口

3)泛型方法
A.非静态方法
泛型定义在public与返回值之间,可以用类的泛型。
B.静态方法
泛型定义在static与返回值之间,但是不可以用方法的泛型。

2、可变参数

	//泛型与可变参数
    public <T5> void getArgs(T5... args) {
        for (T5 arg : args) {
            System.out.println(arg);
        }
    }

类似于泛型方法。

3、通配符与上下限定

当把泛型类对象传入方法,作为参数列表时,可以用?来占位,当然不是一定要?,任何一个符合都可以,只是默认?表示可变类型。

//通配符和上下限定,当前类型或当前类的父类和子类.这只适合方法,不适合类
    public  void show(GenericS<?> a){
        System.out.println(a);
    }

通过extends、super来进行传入类类型的限定。

    public  void show2(GenericS<? extends Number> a){
        System.out.println(a);
    }
    public  void show3(GenericS<? super Integer> a){
        System.out.println(a);
    }

注:
1)extends:限定的类是子类及其自己。
2)super:限定的类是自己及其父类。
3)泛型类,泛型接口只能用extends,不能用super。

总结

1)泛型定义、实现、优点、通配符与上下限定。

参考文献

[1] Java SE 高淇

附录

[1] 完整代码

package com.xhu.java;

public class TestGeneric<T1, T2> {
    private T1 a;
    private T2 b;

    public void setA(T1 a) {
        this.a = a;
    }

    public void setB(T2 b) {
        this.b = b;
    }

    public T1 getA() {
        return a;
    }

    public T2 getB() {
        return b;
    }
    //泛型与可变参数
    public <T5> void getArgs(T5... args) {
        for (T5 arg : args) {
            System.out.println(arg);
        }
    }
    //通配符和上下限定,当前类型或当前类的父类和子类.这只适合方法,不适合类
    public  void show(GenericS<?> a){
        System.out.println(a);
    }
    public  void show2(GenericS<? extends Number> a){
        System.out.println(a);
    }
    public  void show3(GenericS<? super Integer> a){
        System.out.println(a);
    }
    public static void main(String[] args) {
        TestGeneric<Integer, Double> tg = new TestGeneric<>();
        tg.setA(1);
        tg.setB(1d);
        System.out.println(tg.getA());
        Generic g = new GenericC();
        tg.get(1);
        //可变参数
        Integer[] nums = new Integer[]{1,2,3};
        String[] strs = new String[]{"a","b","c"};
        //通配符和上下限定
        GenericS<Integer> gc = new GenericS<>();
        tg.show(gc);
    }

    public <T3> T3 get(T3 a) {
        return a;
    }

    //静态方法无法访问类上的泛型
    public static <T4> void getStatic(T4 n) {
        System.out.println(n);
    }
    static class GenericS<T> {

    }

}

interface Generic<T> {
    T getName();
}

class GenericC implements Generic<String> {

    @Override
    public String getName() {
        return null;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整全套资源下载地址:https://download.csdn.net/download/qq_27595745/66787542 【完整课程列表】 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 01.Java语言概述(共21页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 02.理解结构化程序设计_理解面向对象(共25页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 03.数据类和运算符(共19页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 04.流程控制和数组(共33页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 05.面向对象(上)(共35页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 06.面向对象(下)(共55页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 07.与运行环境交互(共40页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 08.Java集合(共44页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 09.(共15页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 10.异常处理(共24页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 11.AWT编程(共46页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 12.Swing编程(共45页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 13.JDBC编程(共52页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 14.Annotation(共10页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 15.输入输出(共41页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 16.多线程(共44页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 17.网络编程(共42页).ppt 推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 18.类加载与反射(共25页).ppt

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值