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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chen20134 中级黑马   /  2014-3-28 10:18  /  999 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 chen20134 于 2014-3-28 10:52 编辑
  1. public class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Demo<Integer> d=new Demo<Integer>();
  6.                 d.print(new Integer(3));
  7.                 d.print(4);
  8.                 d.print("fafersdf");//为什么这里也能编译通过,运行也成功
  9.         }
  10. }
  11. class Demo<T>
  12. {
  13.         public <T> void print(T t)
  14.         {
  15.                 System.out.println("print:"+t);
  16.         }
  17. }
复制代码

在类上定义了泛型,整数类型,为什么传的字符串类型,也能通过编译,运行也成功了?

评分

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

查看全部评分

3 个回复

倒序浏览
你这不仅在类上定义了泛型,方法上也定义了泛型,你只是把类传进了整形。方法还是没有,而你调用方法,还是传什么都行。代码这样一结果是一样的lass Test
{
        public static void main(String[] args) throws Exception
        {
                Demo d=new Demo();
                d.print(new Integer(3));
                d.print(4);
                d.print("fafersdf");//为什么这里也能编译通过,运行也成功
        }
}
class Demo
{
        public <T> void print(T t)
        {
                System.out.println("print:"+t);
        }
}

这样运行结果是一样的

评分

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

查看全部评分

回复 使用道具 举报
使用泛型可以让编译器检查非法输入,将非法输入当在编译阶段,在编译程字节码文件时,会去掉类型信息,这样在JVM看来就是一个没有加泛型的普通类,这时候就可以通过反射,添加任何信息了,此时没有检查非法输入的功能。
回复 使用道具 举报
你用的也有点问题 在补充一下  这样改下代码运行就会报错了
class Test
{
        public static void main(String[] args) throws Exception
        {
                 Demo<Integer> d=new Demo<Integer>();
                d.print(new Integer(3));
                d.print(4);
                d.print1("fafersdf");//为什么这里也能编译通过,运行也成功
        }
}
class  Demo<T>
{
        public void print(T t)
        {
              System.out.println("print:"+t);
        }
}


这样你传进去什么就必须要是是什么类型了 必须要类型匹配才可以
你穿String类型进去第一句第二句就不能运行会报错,而你传Int型 第三句就会报错。
运行下我这个和上面的代码 ,注释一下语句分别运行 就会很明显的 。
希望可以帮到你
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马