java 泛型怎么那么奇怪? 求指点

webrr 2013-01-06 05:25:23
java 泛型不太懂
比如:

public <T> void func() {}

这里 既然都 void 了, 为什么还要 <T>
为什么不是
public void func() {}

还有

public <T> T naiveCast(T t, Object o) {
return (T) o;
}

这里的 <T> T 甚是疑惑 要么 <T> 或者 T 即可. 如:

public <T> naiveCast(T t, Object o) {
return (T)o;
}


public T naiveCast(T t, Object o) {
return (T)o;
}


热心人指点一下.
有关java泛型易错需要注意的地方也帮忙指出来, 谢谢!
...全文
339 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
咔啪咔啪 2013-01-17
  • 打赏
  • 举报
回复
引用 14 楼 liaojinbiao 的回复:
1. public <T> void func(T t) {} 这里表明func()方法要接收一个任意类型的参数,<T>放在方法前表示声明,要不然编译器就不知道func(T t) 中的T表示什么。 2. public <T> T naiveCast(T t, Object o) { return (T) o; } <T>这个表示的意义和上面解释的一样。 方法上的T native……
这样定义好古怪! 1、里面,既然是要接收一个任意类型的参数,为啥不这样声明呢 public void func(<T> t)这里的<T>不就表示任意类型吗,t是形参。
BaronZ 2013-01-07
  • 打赏
  • 举报
回复
引用 8 楼 raistlic 的回复:
引用 5 楼 BaronZ 的回复: 引用 4 楼 raistlic 的回复:引用 3 楼 webrr 的回复: 引用 2 楼 liaojinbiao 的回复:public <T> void func( T t) {} 中的<T>的意思是这个func()方法要接收一个不知道是什么类型的引用型数据,而<T>就是用来接收你要传递的参数的类型是什么,而不是你说的返回值。举个例子: public <……
我擦,我替我自己捉急,6楼只是多了一个返回类型而已,我就没晃过来。。。 看懂了。。。
BaronZ 2013-01-07
  • 打赏
  • 举报
回复
引用 8 楼 raistlic 的回复:
引用 5 楼 BaronZ 的回复: 引用 4 楼 raistlic 的回复:引用 3 楼 webrr 的回复: 引用 2 楼 liaojinbiao 的回复:public <T> void func( T t) {} 中的<T>的意思是这个func()方法要接收一个不知道是什么类型的引用型数据,而<T>就是用来接收你要传递的参数的类型是什么,而不是你说的返回值。举个例子: public <……
麻烦可不可解释一下6楼的问题?
raistlic 2013-01-07
  • 打赏
  • 举报
回复
引用 5 楼 BaronZ 的回复:
引用 4 楼 raistlic 的回复:引用 3 楼 webrr 的回复: 引用 2 楼 liaojinbiao 的回复:public <T> void func( T t) {} 中的<T>的意思是这个func()方法要接收一个不知道是什么类型的引用型数据,而<T>就是用来接收你要传递的参数的类型是什么,而不是你说的返回值。举个例子: public <String>……
是的。 语法就是这样的,不用纠结
Nazgul_ 2013-01-07
  • 打赏
  • 举报
回复
同求指点·!
BaronZ 2013-01-07
  • 打赏
  • 举报
回复
引用 4 楼 raistlic 的回复:
public <T> T naiveCast(T t, Object o) { return (T) o; } 这个我也有点不理解,T已经声明了,为什么还有<T>,或者如果他不是T的话还好理解些,比如 public <S> T naiveCast(T t, Object o) { //这里用到S return (T) o; }
BaronZ 2013-01-07
  • 打赏
  • 举报
回复
引用 4 楼 raistlic 的回复:
引用 3 楼 webrr 的回复: 引用 2 楼 liaojinbiao 的回复:public <T> void func( T t) {} 中的<T>的意思是这个func()方法要接收一个不知道是什么类型的引用型数据,而<T>就是用来接收你要传递的参数的类型是什么,而不是你说的返回值。举个例子: public <String>void func(String t) 这里的String类型就是……
这么说这个<T>是方法范围的?和类的那个<T>类似?
睛天 2013-01-07
  • 打赏
  • 举报
回复
1. public <T> void func(T t) {} 这里表明func()方法要接收一个任意类型的参数,<T>放在方法前表示声明,要不然编译器就不知道func(T t) 中的T表示什么。 2. public <T> T naiveCast(T t, Object o) { return (T) o; } <T>这个表示的意义和上面解释的一样。 方法上的T native() 这个是表示返回值类型为 T ,而至于 return (T)应该就是表示强转了。 3. public T naiveCast(T t, Object o) { return (T)o; } 这里的 public T 这个T 表示返回值类型为 T ; native(T t, Object o)中的T 表示要接收的参数类型为T. 注意:这里的泛型T 是和这个方法所在类所接收泛型是相同的T. 如:class Demo <T> { public T naiveCast(T t, Object o) { return (T)o; } } 扩展:当然类中的方法也可以接收与类不同的泛型。但是要注意一点,静态的方法不能接收类所传递的泛型。
conolan 2013-01-07
  • 打赏
  • 举报
回复
从11楼学到了
raistlic 2013-01-07
  • 打赏
  • 举报
回复
引用 3 楼 webrr 的回复:
引用 2 楼 liaojinbiao 的回复:public <T> void func( T t) {} 中的<T>的意思是这个func()方法要接收一个不知道是什么类型的引用型数据,而<T>就是用来接收你要传递的参数的类型是什么,而不是你说的返回值。举个例子: public <String>void func(String t) 这里的String类型就是上面对应的T……
public class TypeName<T> { ... } 这里的 <T> 是泛型类型的声明,或者叫形式类型参数,这里声明的 T 就可以在 TypeName 类的所有非静态环境里使用。 使用者的代码是象这样的 : TypeName<String> strType; public <T> void method(T param); 这里的 <T> 同样是泛型类型的声明,跟前面那个没有什么不同,唯一的区别是作用范围: 这里生命的 T 只能在 method 方法内使用。 使用者的代码是象这样的: obj.<String>method("param");
logic_well 2013-01-07
  • 打赏
  • 举报
回复
同上 <>只有声明左右
huangzebiao007 2013-01-07
  • 打赏
  • 举报
回复
1、自定义泛型方法:先写public void test1(T t),由于java中要先声明后使用,所以要在方法前面加上<T> ,即是public <T> T test1(T t) public class Geric { public <T> T test1(T t){ return t; } public <T,K> void test2(T t,K k){ } } 2、自定义泛型类:在类定义了泛型后就不用在方法中再定义了,但静态方法还是要先定义 public class Geric<T> { public T test1(T t){ return t; } public <K> void test2(T t,K k){ } public static <T,K,E> void test3(T t,K k,E e){ } } 如你楼主的public <T> T naiveCast(T t, Object o) { return (T) o; } 这里 <T> 代表是你用来先声明T的,而T代表函数的返回类型,如果去掉<T> 就会由于没有先声明而报错,去掉T 就会由于函数没有返回类型报错
webrr 2013-01-06
  • 打赏
  • 举报
回复
引用 2 楼 liaojinbiao 的回复:
public <T> void func( T t) {} 中的<T>的意思是这个func()方法要接收一个不知道是什么类型的引用型数据,而<T>就是用来接收你要传递的参数的类型是什么,而不是你说的返回值。举个例子: public <String>void func(String t) 这里的String类型就是上面对应的T
你的意思是说, <T> 表明在函数中使用泛型参数, 放在哪里都可以, 只是恰巧被语法规定放在了返回值前面才造成了我的困惑 ?
睛天 2013-01-06
  • 打赏
  • 举报
回复
public <T> void func( T t) {} 中的<T>的意思是这个func()方法要接收一个不知道是什么类型的引用型数据,而<T>就是用来接收你要传递的参数的类型是什么,而不是你说的返回值。举个例子: public <String>void func(String t) 这里的String类型就是上面对应的T
william_yao 2013-01-06
  • 打赏
  • 举报
回复
我也是最近项目用到泛型,不是很懂。mark一下。

62,614

社区成员

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

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