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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-王双 中级黑马   /  2013-6-13 16:52  /  1484 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马-王双 于 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");
}
}

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 神马都是浮云

查看全部评分

4 个回复

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

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

回复 使用道具 举报
在类中定义泛型,在类中所有使用泛型的类型都需要使用同种泛型类型。
你在类中定义的是Object的泛型类型,而Object类型是所有子类的超类,所以可以正常运行。

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1

查看全部评分

回复 使用道具 举报
不知道楼主的问题解决了理解了嘛?
如果是的话.请将主题改成已解决.如果还是不理解请继续发问,谢谢您的配合
回复 使用道具 举报
你要知道泛型的实际用途,是用来却别不同的类型的,如果你用Object的话就没有什么意义了,因为Object类型是所有子类的超类,不过如果你想做一个util类的话就可以通过泛型加反射的制作,泛型只是统一你的接收类型,让你不用转型而获的这个对象,但是编译器编译的时候是会去掉泛型的,所以通过反射可以破解写了泛型的集合来存储不同的类型的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马