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 <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 <T> void func( T t) {} 中的<T>的意思是这个func()方法要接收一个不知道是什么类型的引用型数据,而<T>就是用来接收你要传递的参数的类型是什么,而不是你说的返回值。举个例子:
public <String>void func(String t) 这里的String类型就是上面对应的T
你的意思是说, <T> 表明在函数中使用泛型参数, 放在哪里都可以, 只是恰巧被语法规定放在了返回值前面才造成了我的困惑 ?
public class TypeName<T> { ... }
这里的 <T> 是泛型类型的声明,或者叫形式类型参数,这里声明的 T 就可以在 TypeName 类的所有非静态环境里使用。
使用者的代码是象这样的 : TypeName<String> strType;
public <T> void method(T param);
这里的 <T> 同样是泛型类型的声明,跟前面那个没有什么不同,唯一的区别是作用范围: 这里生命的 T 只能在 method 方法内使用。
使用者的代码是象这样的: obj.<String>method("param");
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;
}
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>
{
public T naiveCast(T t, Object o) {
return (T)o;
}
}扩展:当然类中的方法也可以接收与类不同的泛型。但是要注意一点,静态的方法不能接收类所传递的泛型。
1、里面,既然是要接收一个任意类型的参数,为啥不这样声明呢
public void func(<T> t)这里的<T>不就表示任意类型吗,t是形参。