黑马程序员技术交流社区

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

作者: 黑马-王双    时间: 2013-6-13 16:52
标题: 泛型类
本帖最后由 黑马-王双 于 2013-6-13 18:21 编辑

Demo<Object> d = new Demo<Object>();这样写有错吗?
import java.util.*;
//视频中的想法:泛型定义在方法上,解决不同引用数据类型可传入的问题。
class Demo
{
public <T> void show(T t)
{
  System.out.println("show:"+t);
}
public <Q> void print(Q q)
{
  System.out.println("print:"+t);
}
}
class FanXing
{
public static void main(String[] args)
{
  Demo d = new Demo();
  d.show(5);
  d.print("haha");
}
}
//我的想法:定义泛型类,主函数中没有用String或者Integer,而是直接写的Object
发现传入字符串和数字时可以正常编译和运行。
class Demo<T>
{
public void show(T t)
{
  System.out.println("show:"+t);
}
public void print(T t)
{
  System.out.println("print:"+t);
}
}

class FanXing
{
public static void main(String[] args)
{
  Demo<Object> d = new Demo<Object>();
  d.show(5);
  d.print("haha");
}
}

作者: 蚂蚁搬家    时间: 2013-6-13 17:21
泛型定义在类上是为了确保用这个类创建对象时,对象内使用泛型的方法都使用同一种泛型类型;
就比如你的代码: Demo<Object> d = new Demo<Object>(),这样d引用调用的方法都是Object类型的泛型,
5跟“haha”虽然是不同的类型,但5会自动装箱为Integer类型,而String和Integer都是Object的子类,所以使用时不会报错;

作者: 704050a    时间: 2013-6-13 17:38
在类中定义泛型,在类中所有使用泛型的类型都需要使用同种泛型类型。
你在类中定义的是Object的泛型类型,而Object类型是所有子类的超类,所以可以正常运行。
作者: 孙百鑫    时间: 2013-6-13 17:44
不知道楼主的问题解决了理解了嘛?
如果是的话.请将主题改成已解决.如果还是不理解请继续发问,谢谢您的配合
作者: ′х.|鰉❤耔    时间: 2013-6-13 18:08
你要知道泛型的实际用途,是用来却别不同的类型的,如果你用Object的话就没有什么意义了,因为Object类型是所有子类的超类,不过如果你想做一个util类的话就可以通过泛型加反射的制作,泛型只是统一你的接收类型,让你不用转型而获的这个对象,但是编译器编译的时候是会去掉泛型的,所以通过反射可以破解写了泛型的集合来存储不同的类型的。




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