黑马程序员技术交流社区
标题:
泛型问题
[打印本页]
作者:
chen20134
时间:
2014-3-28 10:18
标题:
泛型问题
本帖最后由 chen20134 于 2014-3-28 10:52 编辑
public class Test
{
public static void main(String[] args)
{
Demo<Integer> d=new Demo<Integer>();
d.print(new Integer(3));
d.print(4);
d.print("fafersdf");//为什么这里也能编译通过,运行也成功
}
}
class Demo<T>
{
public <T> void print(T t)
{
System.out.println("print:"+t);
}
}
复制代码
在类上定义了泛型,整数类型,为什么传的字符串类型,也能通过编译,运行也成功了?
作者:
苏伯亚
时间:
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