java 泛型怎么那么奇怪? 求指点
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泛型易错需要注意的地方也帮忙指出来, 谢谢!
java
------解决方案--------------------
public class TypeName<T> { ... }
这里的 <T> 是泛型类型的声明,或者叫形式类型参数,这里声明的 T 就可以在 TypeName 类的所有非静态环境里使用。
使用者的代码是象这样的 : TypeName<String> strType;
public <T> void method(T param);
这里的 <T> 同样是泛型类型的声明,跟前面那个没有什么不同,唯一的区别是作用范围: 这里生命的 T 只能在 method 方法内使用。
使用者的代码是象这样的: obj.<String>method("param");
------解决方案--------------------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 就会由于函数没有返回类型报错------解决方案--------------------
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>
{