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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 欧德林 中级黑马   /  2012-4-13 10:46  /  1630 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个泛型类里面定义了一个泛型方法和普通方法,为什么泛型方法就可以直接调用 Integer 和String类?
付代码

//泛型方法
class  Demo<T>
{
        public void show (T t)
        {
                System.out.println("show:"+t);
        }
        public <Q> void print (Q q)
        {
                System.out.println("print:"+q);
        }
}
class GDemo
{
        public static void main(String[] args)
        {
                Demo <String> d= new Demo<String>();
                d.show("hehe");
        //        d.show(5);
                d.print("csdn");
                d.print(76);
        }
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

5 个回复

倒序浏览

<Q> 是指 类型参数列表,Q是个未知的类型,由调用它(指泛型方法本身)的具体参数来决定的类型。【方法中传入或返回的泛型类型由调用方法时所设置的参数类型所决定。因此可以是Integer 或者String   很多引用类型。
使用泛型方法的时候,通常不必指明参数类型,因为编译器会为我们找出具体的类型。
回复 使用道具 举报
泛型类与泛型方法互相不冲突,使用泛型方法时一般会根据所传参数而决定。
回复 使用道具 举报
        泛型类定义的泛型,在整个类中有效。如果被方法使用,
        那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。
       
        为了让不同方法可以操作不同类型,而且类型还不确定。
        那么可以将泛型定义在方法上。
回复 使用道具 举报
使用泛型方法的时候,编译器会为我们找出具体的类型。
传进去什么类型就返回什么类型
所以你传字符和数字都能够编译以及运行
回复 使用道具 举报
1、声明泛型方法,一般是因为您想要在该方法的多个参数之间宣称一个类型约束。
2、注意,您可以调用print (Q q)方法时,而不用显式地告诉编译器,您想要 Q 的什么值。
   编译器不必显式地被告知 Q 将具有什么值;它只知道这些值都必须相同。
   因为编译器可以使用类型推理来推断出,替代Q满足所有的类型约束。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马