黑马程序员技术交流社区

标题: 看资料的时候看到这么一个例子,百思不得其解,求解 [打印本页]

作者: 田向向    时间: 2012-6-20 19:06
标题: 看资料的时候看到这么一个例子,百思不得其解,求解
本帖最后由 田向向 于 2012-6-21 16:17 编辑

public class TestShowGeneric {
public static void main(String[] args) {
TestShowGeneric a = new TestShowGeneric();
ShowGeneric b = new ShowGeneric();
b.setA("对ShowGeneric类中方法的调用");
a.fun(b);
}
public static void fun(ShowGeneric<? extends Number> c) {
System.out.println(c.getA());
}
}
class ShowGeneric<D> {
private D a;

public D getA() {
return a;
}

public void setA(D a) {
this.a = a;
}
}
在b.setA("对ShowGeneric类中方法的调用");a.fun(b);实参b为什么能够成功的传给public static void fun(ShowGeneric<? extends Number> c) 形参c;
作者: 车风波    时间: 2012-6-20 19:38
创建ShowGeneric对象b的时候没有定义泛型,所以fun()的形参ShowGeneric<? extends ArrayList>就没什么意义了,也就是你想传什么参数都行,只要是ShowGeneric对象
作者: 龙秋地    时间: 2012-6-20 20:03

  1. public class TestShowGeneric
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 TestShowGeneric a = new TestShowGeneric();
  6.                 ShowGeneric b = new ShowGeneric();
  7.                
  8.                 b.setA("对ShowGeneric类中方法的调用");
  9.                
  10.                 a.fun(b);
  11.         }
  12.         public static void fun(ShowGeneric<? extends Number> c)
  13.         {
  14.                 System.out.println(c.getA());
  15.         }
  16. }
  17. class ShowGeneric<D>
  18. {
  19.         private D a;

  20.         public D getA()
  21.         {
  22.         return a;
  23.         }

  24.         public void setA(D a)
  25.         {
  26.         this.a = a;
  27.         }
  28. }
复制代码
楼主的代码格式太乱了,我自己整理了一下.
首先介绍一下Number,他是一个类.
<?>
? extends T : 接收T类型或者T的子类型.
而Number的子类有直接已知子类: AtomicInteger, AtomicLong, BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short.其实这些在这个代码中用不上,为什么呢?
因为你传的b它就是ShowGeneric类的对象(或者可以说你的fun()方法的形参就是ShowGeneric类型的参数),而且还没确定泛型是什么类型的.
所以肯定能行.当然了如果你想传什么类型的,必须在NUmber或者是其子类(以上已列出)中找,
才能成功.





作者: 黑马-王言龙    时间: 2012-6-20 20:12
  1. ShowGeneric b = new ShowGeneric();
复制代码
b是ShowGeneric类型的引用变量
fun(ShowGeneric<? extends Number> c)这里也是要求你传入ShowGeneric类型的引用,所以能传成功。
作者: 田向向    时间: 2012-6-21 16:09
龙秋地 发表于 2012-6-20 20:03
楼主的代码格式太乱了,我自己整理了一下.
首先介绍一下Number,他是一个类.

谢谢,我是新手,多多赐教
作者: 徐传任    时间: 2012-10-10 12:22
看看...........................




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