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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 风云 中级黑马   /  2013-5-31 12:00  /  1023 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 风云 于 2013-6-1 16:18 编辑

什么时候该用泛型呢?

评分

参与人数 1技术分 +1 收起 理由
Sword + 1 这种问题可以自己去总结

查看全部评分

2 个回复

倒序浏览
     只要在使用类或者接口时,该类或者接口在API文当描述时都带着<>就需要在使用时,定义泛型。
其实,泛型无非就是通过<>定义了一个形式参数。专门用于接收具体的引用类型。在使用时,一定要传递对应的实际参数类型。
     有了泛型类,省去了曾经的强转和类型转换异常的麻烦。
泛型定义在方法上
  1. class Tool2<W>{
  2. public void show(W w){
  3. System.out.println("show:"+w.toString());
  4. }
  5. public  void myprint(W w){
  6. System.out.println("myprint:"+a.toString());
  7. }
复制代码
主函数中创建该泛型类对象,并调用该泛型类中的方法
Tool2<String> t = new Tool2<String>();
t.show("abc");
t.show(new Integer(4));这儿会编译失败。因为只能是String类
t.myprint("haha");
t.myprint(new Integer(4));同上。
}而我对这个myprint方法,想要操作的类型是不确定的,但是不一定和调用该方法的对象指定的类型一致。
*这时 可以将泛型定义在方法上。
public <A> void myprint(A a){
System.out.println("myprint:"+a.toString());
}此时,上面的t.myprint(new Integer(4));就不会再编译报错了
另外,静态方法不能访问类上定义的泛型,如果需要泛型,该泛型只能定义在方法上。即如果void前没有 <Y> ,会编译失败的。
public   static <Y> void method(Y w){
System.out.println("method:"+w);
}

评分

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

查看全部评分

回复 使用道具 举报
       什么时候用泛型:当类中的操作的引用数据类型不确定的时候,以前用的Object来进行扩展的,1.5版本以后可以用泛型来表示。这样可以避免强转的麻烦,而且将运行问题转移到的编译时期。
      泛型其实只在编译时期起作用,是给编译器使用的技术,到了运行时期,泛型就不存在了。因为泛型的擦除,也就是说,编辑器检查了泛型的类型正确后,在生成的类文件中是没有泛型的。
       泛型是先定义后使用,一般情况下有三种定义:
       一、把泛型定义在类上,比如:
  1. package com.itheima;

  2. class Tool<Q> {
  3.         private Q obj;

  4.         public void setObject(Q obj) {
  5.                 this.obj = obj;
  6.         }

  7.         public Q getObject() {
  8.                 return obj;
  9.         }
  10. }
复制代码
二、把泛型定义在方法上:
  1. public <W> void method(W w) {
  2.                 System.out.println("method:" + w);
  3.         }
复制代码
注意:如果类里面有两个或两个以上的方法都用的同一个类型的参数,必须要把泛型定义在类上。
三、把泛型定义在静态方法上:静态方法无法访问类上定义的泛型(因为对象传入的具体类型,没办作用在静态函数上),所以静态上要用泛型必须定义在静态方法上
  1. public static <Q> void function(Q t) {
  2.                 System.out.println("function:" + t);
  3.         }
复制代码

评分

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

查看全部评分

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