黑马程序员技术交流社区

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

作者: 欧德林    时间: 2012-4-13 10:46
标题: 泛型方法问题
一个泛型类里面定义了一个泛型方法和普通方法,为什么泛型方法就可以直接调用 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);
        }
}

作者: 未长法    时间: 2012-4-13 15:01

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






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