黑马程序员技术交流社区

标题: 泛型问题 [打印本页]

作者: chen20134    时间: 2014-3-28 10:18
标题: 泛型问题
本帖最后由 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. }
复制代码

在类上定义了泛型,整数类型,为什么传的字符串类型,也能通过编译,运行也成功了?
作者: 苏伯亚    时间: 2014-3-28 10:35
你这不仅在类上定义了泛型,方法上也定义了泛型,你只是把类传进了整形。方法还是没有,而你调用方法,还是传什么都行。代码这样一结果是一样的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);
        }
}

这样运行结果是一样的

作者: wconho    时间: 2014-3-28 10:37
使用泛型可以让编译器检查非法输入,将非法输入当在编译阶段,在编译程字节码文件时,会去掉类型信息,这样在JVM看来就是一个没有加泛型的普通类,这时候就可以通过反射,添加任何信息了,此时没有检查非法输入的功能。
作者: 苏伯亚    时间: 2014-3-28 10:46
你用的也有点问题 在补充一下  这样改下代码运行就会报错了
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型 第三句就会报错。
运行下我这个和上面的代码 ,注释一下语句分别运行 就会很明显的 。
希望可以帮到你





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