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

解决方案 »

  1.   


    public <T> void func( T t) {} 中的<T>的意思是这个func()方法要接收一个不知道是什么类型的引用型数据,而<T>就是用来接收你要传递的参数的类型是什么,而不是你说的返回值。举个例子:
    public <String>void func(String t) 这里的String类型就是上面对应的T
      

  2.   


    你的意思是说, <T> 表明在函数中使用泛型参数, 放在哪里都可以, 只是恰巧被语法规定放在了返回值前面才造成了我的困惑 ?
      

  3.   


    public class TypeName<T> { ... } 
    这里的 <T> 是泛型类型的声明,或者叫形式类型参数,这里声明的 T 就可以在 TypeName 类的所有非静态环境里使用。
    使用者的代码是象这样的 : TypeName<String> strType;
    public <T> void method(T param);
    这里的 <T> 同样是泛型类型的声明,跟前面那个没有什么不同,唯一的区别是作用范围: 这里生命的 T 只能在 method 方法内使用。
    使用者的代码是象这样的: obj.<String>method("param");
      

  4.   

    这么说这个<T>是方法范围的?和类的那个<T>类似?
      

  5.   


    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; 
     } 
      

  6.   

    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 就会由于函数没有返回类型报错
      

  7.   

    同上 <>只有声明左右
      

  8.   


    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;
        }
    }扩展:当然类中的方法也可以接收与类不同的泛型。但是要注意一点,静态的方法不能接收类所传递的泛型。
      

  9.   

    这样定义好古怪!
    1、里面,既然是要接收一个任意类型的参数,为啥不这样声明呢
    public void func(<T> t)这里的<T>不就表示任意类型吗,t是形参。