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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张扬123 中级黑马   /  2012-8-17 17:08  /  1495 人查看  /  3 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张扬123 于 2012-8-17 17:11 编辑
  1. interface Inter<T>
  2. {
  3.         void show(T t);
  4. }
  5. class InterImpl<T> implements Inter<T>
  6. {
  7.         public void show(T t)
  8.         {
  9.                 System.out.println("show:"+t);
  10.         }
  11. }
  12. class GenericDemo5
  13. {
  14.         public static void main(String[] args)
  15.         {
  16.                 InterImpl<Integer> i = new InterImpl<Integer>();//此处的泛型不加也能通过,为什么?
  17.                 i.show(4);
  18.         }
  19. }
复制代码
而另一个例子,泛型类。
  1. class Worker
  2. {
  3. }
  4. class Student
  5. {
  6. }
  7. class Utils<QQ>
  8. {
  9.         private QQ q;
  10.         public void setObject(QQ q)
  11.         {
  12.                 this.q = q;
  13.         }
  14.         public QQ getObject()
  15.         {
  16.                 return q;
  17.         }
  18. }
  19. class GenericDemo3
  20. {
  21.         public static void main(String[] args)
  22.         {
  23.                 Utils<Worker> u = new Utils<Worker>();//此处的泛型不加就会出错,这为什么?
  24.                 u.setObject(new Worker());
  25.                 Worker w = u.getObject();
  26.         }
  27. }
复制代码
泛型类和泛型接口的不同又在哪呢?

评分

参与人数 1技术分 +1 收起 理由
张立江 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
本帖最后由 刘圣伟 于 2012-8-17 17:27 编辑

class Worker
{
}
class Student
{
}
class Utils<QQ>
{
        private QQ q;
        public void setObject(QQ q)
        {
                this.q = q;
        }
        public QQ getObject()
        {
                return q;
        }
}
class GenericDemo3
{
        public static void main(String[] args)
        {
                Utils<Worker> u = new Utils<Worker>();<u><b>//此处的泛型不加就会出错,这为什么?</b></u>
                u.setObject(new Worker());
                Worker w = u.getObject();  //因为这个方法,返回只必须是QQ类型的,所有,就确定了,U的类型,所有上面不写是编译通不过的,如果把这句注释掉,上的就可以不加泛型了; ;
        }
}

泛型类定义的泛型,在整个类中有效,如果被方法使用;
  那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定
为了让不同方法可以操作不同类型,而类型还不确定;
  那么可以将泛型定义在方法上。

评分

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

查看全部评分

回复 使用道具 举报
没有人能完整回答这个问题么。。。
回复 使用道具 举报
我做了一下实验。
  1. package test;

  2. interface Inter<T>
  3. {
  4.         void show(T t);
  5. }
  6. class InterImpl<T> implements Inter<T>
  7. {
  8.         private T t;
  9.         public void show(T t)
  10.         {
  11.                 System.out.println("show:"+t);
  12.         }
  13.         public T getObject()//此处加了一个返回值为T的方法。
  14.         {
  15.                 return t;
  16.         }
  17. }
  18. class GenericDemo5
  19. {
  20.         public static void main(String[] args)
  21.         {
  22.                 InterImpl/*<Integer>*/ i = new InterImpl/*<Integer>*/();//此处的泛型不加也能通过,为什么?
  23.                 Integer a=i.getObject();//那么此处调用这个方法的时候也会出现跟下面的代码一样的错误。这是因为此处的Integer是便是T类型但是Integer从来没有声明过便被使用了。所以便会报错。这时将上面一行的注释去掉,程序便恢复正常。
  24.                 i.show(4);
  25.         }
  26. }
复制代码
  1. package test;

  2. class Worker
  3. {
  4. }
  5. class Student
  6. {
  7. }
  8. class Utils<QQ>
  9. {
  10.         private QQ q;
  11.         public void setObject(QQ q)
  12.         {
  13.                 this.q = q;
  14.         }
  15.         public QQ getObject()
  16.         {
  17.                 return q;
  18.         }
  19. }
  20. class GenericDemo3
  21. {
  22.         public static void main(String[] args)
  23.         {
  24.                 Utils u = new Utils();//此处的泛型不加就会出错,这为什么?
  25.                 u.setObject(new Worker());
  26.                 Worker w = u.getObject();//如果上面没有泛型,那么这句代码也会出错。也是因为Worker就是QQ类型但是就没有声明过。所以使用便会报错。
  27.         }
  28. }
复制代码
所以泛型接口和泛型类在泛型这方面应该是没有区别的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马