Java泛型中 ? 和 T 的区别

先上几段代码,看看区别

//接口1(没有实际意义)
public interface IToString {
    String toLocalString();
}
//接口2,没有实际意义
public interface IPrint{
    void printThis();
}

 实现类

@Data
public class Person implements IPrint, IToString{
    private int age;
    private byte sex;
    private double salary;
    private String name;

    @Override
    public String toString() {
        return "Person{" +
                "age=" + age +
                ", sex=" + sex +
                ", salary=" + salary +
                ", name='" + name + '\'' +
                '}';
    }

    @Override
    public void printThis() {
        System.out.println(this.toLocalString());
    }

    @Override
    public String toLocalString() {
        return this.toString();
    }
}

功能类, 这个类可要看仔细了

public class Printer {

    public static <T> void printThis(Class<T> obj) {
        System.out.println(obj.getClass());
    }

    public static void printThis2(Class<?> obj) {
        System.out.println(obj.getClass());
    }

    public static <T extends IPrint&IToString> void printThis3(Class<T> obj) {
        System.out.println(obj.getClass());
    }

    public static <T extends IPrint&IToString> void printThis4(T object) {
        object.printThis();
    }
}

测试类

    @Test
    public void testT() {
        Person p = new Person();

        Printer.printThis(p.getClass());

        Printer.printThis2(p.getClass());

        Printer.printThis3(p.getClass());

        Printer.printThis4(p);
    }

首先, 接口和实现类没有实际意义, 仅用于测试泛型, 不做过多纠结

功能类有四个静态方法,printThis, printThis2, printThis3, printThis4

1. printThis和printThis2, 代码看上去不一样, 实际效果是一样的, 参数都是任意类类型(注意不是类对象)

2. printThis和printThis3,唯一的区别是泛型T做了限制,必须是实现了IPrint和IToString接口的类类型

3. printThis3和printThis4, 泛型T限定一样, 区别是前者是T类, 后者参数是T实例

没看懂的, 看下测试类就清楚了, 前面三个参数使用的都是, p的类类型, 最后一个使用的是类实例

总结: 参数要用实例是没办法用Class<?>的, Class<T> 使用场景是要使用限定类类型, 如果T类型不做限定,那么和Class<?> 没有区别。 

补充:T这个字符没有任意意义, 换成A,B,C也完全可以,只是一种习惯写法。

欢迎有疑问的同学留言

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

问道飞鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值