java class<t>_Class<T>和 Class<?>类型 有什么区别

平时看java源代码的时候,如果碰到了泛型,像 ?、T 、K 、V、 E 这些是经常出现的,但是不知道代表什么意思,今天特地整理下:

? 表示不确定的java类型。

T 表示java类型。

K V 分别代表java键值中的Key Value。

E 代表Element。

Object和泛型通配符区别?

Object是所有类的根类,是具体的一个类,使用的时候可能需要类型强制转换的,但是用通配符 ?、T 、K 、V、 E 等这些的话,在实际用之前类型就已经确定了,不需要强制转换。

追问:

也就是说,这个方法能知道返回的是哪种类型(父类),就用T行了?如果完全不知道的就用?用T的得到的对象就不需要类型转换了,而用?的就必需用强转了!

追答:

第一种是固定的一种泛型,第二种是只要是Object类的子类都可以,换言之,任何类都可以,因为Object是>所有类的根基类,固定的泛型指类型是固定的,比如:Interge,String就是

这里?代表一个未知的类型,

但是,这个未知的类型实际上是Collection的一个子类,Collection是这个通配符的上限。

举个例子:

class Test { }

其中,限定了构造此类实例的时候T是一个确定类型(具体类型),这个类型实现了Collection接口,但是实现 Collection接口的类很多很多,如果针对每一种都要写出具体的子类类型,那也太麻烦了,干脆还不如用Object通用一下。 extends Collection>其中,?是一个未知类型,是一个通配符泛型,这个类型是实现Collection接口即可。

_________________________上面讲的是什么鬼,当你知道引入通配符泛型的由来之后

fecafcc83fba

image.png

fecafcc83fba

image.png

当引入泛型之后,遇到这种情况,参数怎么写都不适合,总有2个方法不适用,为了给泛型类写一个通用的方法,这时候就需要引入了 ?通配符的概念。

fecafcc83fba

image.png

public class Demo {

private T ob;

public T getOb() {

return ob;

}

public void setOb(T ob) {

this.ob = ob;

}

public Demo(T ob) {

super();

this.ob = ob;

}

public void print(){

System.out.println("T的类型是:"+ob.getClass().getName());

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值