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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Jaybor 中级黑马   /  2015-3-2 17:42  /  1278 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我自定义了Pair、Manager类,然后发现下面的代码居然可以运行:
  1. class Pair<T>
  2. {
  3.         private T first;
  4.         private T second;
  5.         public Pair(T first, T second)
  6.         {
  7.                 this.first=first;
  8.                 this.second=second;
  9.         }
  10.         public T getFirst()
  11.         {
  12.                 return first;
  13.         }
  14.         public T getSecond()
  15.         {
  16.                 return second;
  17.         }
  18.         public void setSecond(T second)
  19.         {
  20.                 this.second=second;
  21.         }
  22.         public void setFirst(T first)
  23.         {
  24.                 this.first=first;
  25.         }
  26.         public static void main(String[] args)
  27.         {
  28.                Manager ceo=new Manager("zhangsan");
  29.                Manager cfo=new Manager("lisi");
  30.                Pair<Manager> manager=new Pair<Manager>(ceo,cfo);
  31.                Pair pr=manager;
  32.                pr.setFirst("错误实例");
  33.         }
  34. }
复制代码

这样操作会使得Pair<Manager>的实例里包含一个非Manager的实例,但是运行是没问题的?

       

5 个回复

倒序浏览
好家伙,一个类用尽了泛型的所有。

Pair pr=manager;
这一句其实就是多态的运用,你觉得呢
回复 使用道具 举报
sofeel 发表于 2015-3-3 18:55
好家伙,一个类用尽了泛型的所有。

Pair pr=manager;

利用这个原理可以在一个ArrayList<Integer>实例list里添加一个String对象,搞破坏用的哈哈~
回复 使用道具 举报
没这样试过,真的能行啊!
回复 使用道具 举报
这恰恰证明了java的泛型只存在于编译时期,而不是.NET的真运行时强类型泛型
回复 使用道具 举报
大 牛                    。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马