黑马程序员技术交流社区

标题: java泛型中的类级别的自定义<T>疑问? [打印本页]

作者: lonely_zb    时间: 2013-9-6 02:21
标题: java泛型中的类级别的自定义<T>疑问?
本帖最后由 杨增坤 于 2013-9-11 17:41 编辑

package com.itcast.day2;
import java.util.Set;
/**
* 自定义泛型类的级别
* @author bo
*
* @param <T>
*/
public class GenericDao<T> {


public void add(T t){
  
}
public T findById(int id){
  return null;
}

public void delete(T obj){
  
  
}

public Set<T> findByConditions(String where){
  return null;
}
}


为什么GenericDao<T> 不能有static静态方法啊..我一写编辑器就报错.....?

作者: yangjie    时间: 2013-9-6 02:34
自定义泛型类可以有静态方法,但静态方法中不能用到类上定义的泛型T
因为T要到建立对象的时候才会被指定具体类型,而静态方法是先于对象存在的
作者: 胡志翔    时间: 2013-9-6 12:58
静态方法优先于对象而存在,这里泛型T只有当建立对象时才会被指定,所以这里不能用static静态
作者: ......    时间: 2013-9-6 16:20
java虚拟机加载类的时候就会把类中的静态方法和静态变量加载进内存,而自定义泛型类的泛型直到创建对象时才会被指定类型。泛型类中可以有静态方法,但该方法不能使用泛型
作者: 李锡碧    时间: 2013-9-6 18:51
泛型对其所有可能的类型参数,都具有同样的行为,从而可以把相同的类当成许多不同的类来处理。于此一致的是,类的静态变量和方法也在所有的实例间共享,所以在静态方法、静态初始化或者静态变量的声明和初始化中不允许使用类型形参。
作者: dunwu    时间: 2013-9-6 19:23
本帖最后由 张站华 于 2013-9-6 20:08 编辑

1、泛型类的作用范围是整个类中中,泛型要在创建对象时才能确定,而静态方法是随着类的加载而加载,如果要加与泛型类相同的泛型,此时对象还未实例化,不确定泛型类型。
2.如果一定要在泛型类中的静态方法中加泛型,则就直接写泛型方法。
作者: 王广亚    时间: 2013-9-6 19:40
可以的是没问题的
  1. import java.util.Set;
  2. /**
  3. * 自定义泛型类的级别
  4. * @author bo
  5. *
  6. * @param <T>
  7. */
  8. public class GenericDao<T> {
  9.         public static void main(String args[])
  10.         {
  11.                 System.out.println(add("54"));
  12.         }       
  13.         public static <Q> Q add(Q q)
  14.         {
  15.                 return q;
  16.         }
  17. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2