A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lonely_zb 中级黑马   /  2013-9-6 02:21  /  1334 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 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静态方法啊..我一写编辑器就报错.....?

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

6 个回复

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

1、泛型类的作用范围是整个类中中,泛型要在创建对象时才能确定,而静态方法是随着类的加载而加载,如果要加与泛型类相同的泛型,此时对象还未实例化,不确定泛型类型。
2.如果一定要在泛型类中的静态方法中加泛型,则就直接写泛型方法。

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
可以的是没问题的
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马