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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 vaqh 于 2014-8-1 18:35 编辑
  1. class Demo1<T>
  2. {
  3.         public void show(T t)
  4.         {
  5.                 System.out.println("show:"+t);
  6.         }
  7.         public void print(T t)
  8.         {
  9.                 System.out.println("print:"+t);
  10.         }
  11. }
  12. class GenericDemo4
  13. {
  14.         public static void main(String[] args)
  15.         {
  16.                 Demo1 d = new Demo1();
  17.                 d.show(4);
  18.                 d.print("hello");
  19.         }
  20. }
复制代码


6 个回复

倒序浏览
本帖最后由 玥夜 于 2014-8-1 15:32 编辑

T就好比多种口味的棒棒糖  但是每次你只能吃一个  下次吃的时候 口味就变了


  1. <p>public class tist
  2. {</p><p> public static void main(String[] args)
  3. {
  4.   Demo d=new Demo();/<font color="red">/此处没有指定泛型类型</font>
  5.   d.show1(4);//正确
  6.   d.show2("hello");//正确
  7.   System.out.println();
  8.   System.out.println();
  9.   
  10.   Demo<Integer>d1=new Demo<Integer<font color="red">>();//此处指定泛型类型为Integer所以show2不能传其他类型,</font>
  11.           <font color="red"> //而show3是自定义的泛型与类上的无关,可以传任意类型的</font>
  12.   d1.show1(4);//正确
  13.   <font color="red">d1.show2("hello");//错误</font>
  14.   d1.show3("hello");//正确

  15. }
  16. }</p><p>
  17. class Demo<T>
  18. {
  19. public void show1(T t)
  20. {
  21.   System.out.println("show1"+t);
  22. }

  23. public void show2(T t)
  24. {
  25.   System.out.println("show2"+t);
  26. }
  27. public<Q> void show3(Q q)
  28. {
  29.     System.out.println("show3"+q);
  30. }
  31. } </p>
复制代码


回复 使用道具 举报
class 类<泛型类型T>{
      修饰符  泛型类型T   属性;
      public  泛型类型 T   getter(){}
      public  void   sttter( 泛型类型  变量){}
这里的泛型类型指的是包装类,即integer,String,等等
泛型的主要原理是在类声明时通过一个标识,表示类中某个属性的类型或者是某个方法的返回值及参数类型。

在Demo1类中使用<T> 表示此类型是由外部调用本类时指定的,就是外部调用的什么类型,他指定的就是什么类型,返回的也就是这个类型
回复 使用道具 举报
main函数中都没给T赋上具体的类型,会报错
回复 使用道具 举报
玥夜 发表于 2014-8-1 11:20
T就好比多种口味的棒棒糖  但是每次你只能吃一个  下次吃的时候 口味就变了 ...

奇怪的是可以通过编译,而且可以运行
回复 使用道具 举报
vaqh 发表于 2014-8-1 14:31
奇怪的是可以通过编译,而且可以运行

因为new对象的时候没指定泛型,所有调用其方法的时候可以传任意类型的参数进去,T就是代表的任意类型!所以编译能通过,也能运行!
如果你直接在创建对象的时候就指定泛型,那么对象的方法也必须按照你指定的泛型类型进行参数传递!否则编译不通过!!!
回复 使用道具 举报
vaqh 中级黑马 2014-8-1 15:46:59
7#
格子、 发表于 2014-8-1 14:45
因为new对象的时候没指定泛型,所有调用其方法的时候可以传任意类型的参数进去,T就是代表的任意类型!所 ...

恩,有那么一点明白了,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马