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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴立杰 中级黑马   /  2012-7-29 22:37  /  1791 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.Set;
  2. //泛型定义在类上
  3. public class GenericDao<T>{
  4.         public Set<T> getSet(String s){
  5.                 return null;
  6.         }
  7. //为什么静态方法不可以加实例化后的泛型        是不是泛型也是一个类呢?
  8.         //这个可以
  9.          public static <T> void testGeneric(T x){       
  10.         }
  11.          //这个不可以
  12.          public static void testGeneric2(T x1){
  13.                  
  14.          }
  15. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田向向 + 1 恭喜你,拿到进黑马的钥匙了

查看全部评分

5 个回复

倒序浏览
泛型有一个注意事项,就是,静态方法不能访问类上的泛型。匆忙翻了翻笔记,找到了,呵呵
回复 举报
首先泛型其实也属于类,当类中定义了static方法时,静态方法是不可以直接访问类上的泛型的。
因为类上的泛型只能通过建立对象才可以明确具体类型。在静态方法中如果操作的引用数据不确定,
只能将泛型定义在方法上。希望对你有帮助!

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 举报
这里涉及到参数变量的生命周期问题。因为对类的泛型,只有在对象被创建创建时才会正式确定真正的参数类型。
比如List<String> list = new ArrayList<String>();
所以在这之前它只是一个字符代号。所以,如果把T作有静态函数的参数类型是不行的,因为静态函数的参数类型
是要在子节码对象时就要确定,也就是说它生周期在长一些。比如,没有创建对象就可以调用静态方法。但此时
T还没确定具体类型。所以这样是不行的,编译器会报错!
回复 举报
泛型当然是一个类。
类上的泛型需要new这个类才能获得具体的类型,在方法中,参数类型不确定的情况下,只能把泛型定义在方法上,而不能定义在参数中
回复 举报
举个最常用的例子好了,对于集合类List,你知道可以往里add Object型的对象,也就是任何对象。但在未知环境里,你只允许往里add String型的对象,或者你需要在不转型的情况下直接往出拿里面的对象,那么就可以用泛型,代码如下
List list1 = new ArrayList();  此时可以list.add(object)     list.add(string) 你可以放任意对象
但如果我只需要创建字符串型的集合,那么
List<String> list2 = new ArrayList<String>(); 这样,除String以外的类型就存不进去了
取的时候
String str1 = (String) list1.get(0); 需要转型
String str2 = list2.get(0); 不需要转型

另外,泛型还可用于方法,比如
public T getValue(List<T> list){
处理list集合,list里存什么类型的对象,方法返回的结果就是什么类型的对象
}

还有一些其他的东西 比如<T extends ?>等等这些用法,你慢慢查吧,这东西很复杂
回复 举报
您需要登录后才可以回帖 登录 | 加入黑马