关于泛型

FourQueue 2013-04-16 11:41:49
关于方法的泛型

方法1:

public static <T> T fun1(T t){
return t;
}

方法2:

public static <T> T fun2(String str){
return (T)new Object();
//这里有警告 Type safety: Unchecked cast from Object to T
}


问题:
方法1很好理解,虚拟机根据传入的参数T推断返回值.
方法2就很费解啊,编译器怎么知道我返回的是什么?关键是如下调用方法还能编译通过,并且没有警告:

int s = fun2("ssssssssssss");//传入参数String,返回类型int
System.out.println(s);
...全文
182 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fei1710 2013-04-16
  • 打赏
  • 举报
回复
int s = fun2("ssssssssssss"); 编译器会根据调用的返回值推断出是Integer类型。 实际上虚拟机层面并不知道对象是不是泛型,一切都在编译时搞定的。
  • 打赏
  • 举报
回复
? 表示不确定的java类型。 T 表示java类型。 K V 分别代表java键值中的Key Value。 E 代表Element。 Object跟这些东西代表的java类型有啥区别呢? Object是所有类的根类,是具体的一个类,使用的时候可能是需要类型强制转换的,但是用T ?等这些的话,在实际用之前类型就已经确定了,不需要强制转换。
  • 打赏
  • 举报
回复
他知道返回object的java类型
FourQueue 2013-04-16
  • 打赏
  • 举报
回复
貌似2楼3楼说的是正确的
loveofmylife 2013-04-16
  • 打赏
  • 举报
回复
编译器知道你方法声明的返回值类型的T 然后你的方法return的是T 于是通过编译 只不过运行的时候会有runtimeexception

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧