Java学习——泛型

泛型

泛型类的使用

package com.study.classReuse.generalType;

class  GeneralType<Type>{  // 泛型,所操作的数据类型被指定成一个参数Type
    Type obj;
    public GeneralType(Type obj){
        this.obj = obj;
    }  // 构造方法
    public Type getObj(){  // get方法
        return obj;
    }
}

public class GeneralTypeTester {
    public static void main(String[] args) {
        GeneralType<Integer> i = new GeneralType<>(2);  // 自定义Type为整数Integer
        GeneralType<Double> d = new GeneralType<>(3.14);  // 自定义Type为整数Double
        System.out.println("i.obj="+i.getObj());  // 获取i的值
        System.out.println("d.obj="+d.getObj());  // 获取d的值
        System.out.println("(Integer)i.obj="+(Integer)i.getObj());
        // System.out.println("(Integer)d.obj="+(int)d.getObj()); // 编译报错,包装类对象的强制转换(非法)
        System.out.println(""+(int)3.14);  // 基本数据类型之间的强制转换(合法)
    }
}

i.obj=2
d.obj=3.14
(Integer)i.obj=2
3

泛型方法的使用

package com.study.classReuse.generalType;

class GeneralMethod {
    // 定义泛型方法,如打印对象类名方法
    <Type> void printClassName(Type obj){
        System.out.println(obj.getClass().getName());
    }
}

public class GeneralMethodTester {
    public static void main(String[] args) {
        GeneralMethod gm = new GeneralMethod();
        gm.printClassName("你好");  // 引用数据类型Type为String
        gm.printClassName('A');  // 引用数据类型Type为Character
        gm.printClassName(3);  // 引用数据类型Type为Integer
        gm.printClassName(3.0f);  // 引用数据类型Type为Float
        gm.printClassName(3.14);  // 引用数据类型Type为Double
    }
}

java.lang.String
java.lang.Character
java.lang.Integer
java.lang.Float
java.lang.Double

通配符的使用

package com.study.classReuse.generalType;
// 泛型中通配符的使用

class GeneralType4<Type4> {
    Type4 obj;  // 用泛型参数定义成员变量,类型由使用时指定

    // 构造方法,接收Type4类型的参数,初始化obj
    public GeneralType4(Type4 newObj) {
        this.obj = newObj;
    }

    // get方法,返回Type4类型的obj,和成员变量类型一致
    public Type4 getObj() {
        return obj;
    }
}

class ShowType{
    // 打印数据类型
    public static void showType(GeneralType4<?> o) {  // GeneralType<?>代表是任意泛型参数的GeneralType4
        System.out.println(o.getObj().getClass().getName());  // 获取o包装的对象的实际类型名称,然后打印
        // 之前的问题是 “GeneralType2<Integer>不能传给GeneralType2<Object>”,
        // 而?代表任意泛型参数,所以不管GeneralType4的泛型参数是Integer、String还是其他类型,都能传给这个方法。
    }
}

public class TheUseOfWildcards {
    public static void main(String[] args) {
        GeneralType4<Integer> i = new GeneralType4<>(2);
        GeneralType4<String> s = new GeneralType4<>("你好");
        ShowType.showType(i);
        ShowType.showType(s);
    }
}

java.lang.Integer
java.lang.String

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qhumaing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值