黑马程序员技术交流社区

标题: 关于泛型的问题 [打印本页]

作者: 唐巍    时间: 2012-3-22 01:52
标题: 关于泛型的问题
请看下面代码:
class Demo<T>
{
        public void show(T t)
        {
                System.out.println("show:"+t);
        }
        public <Q> void print(Q q)
        {
                System.out.println("print:"+q);
        }
        public static void method(T t)//报错,提示静态方法method泛型T无法引用,为什么?
        {
                System.out.println("method:"+t);
        }
}
class GenericDemo4
{
        public static void main(String[] args)
        {
                Demo<String> d=new Demo<String>();
                d.show("wanglin");
                d.print("love");
                d.print(2);
                d.method("tangwei");
        }
}
作者: 田斌    时间: 2012-3-22 02:03
public static void method(T t)//报错,提示静态方法method泛型T无法引用,为什么?
        {
                System.out.println("method:"+t);
        }

应该为
  public static void<T> method(T t)   //加泛型
        {
                System.out.println("method:"+t);
        }
作者: 贠(yun)靖    时间: 2012-3-22 02:05
本帖最后由 贠(yun)靖 于 2012-3-22 02:11 编辑

因为你的方法是静态方法   而类又不是静态方法   你看看你编译是不是说
  无法从静态方法引用非静态什么什么的     把static去掉就哦了

     或者 public static <W> void method(W w)        {
                System.out.println("method:"+t);
        }
  静态的方法泛型要从新定义   不能直接使用类的泛型  
作者: 朱亚安    时间: 2012-3-22 02:06
这个经试验吧,得出static后必须加上<T>才能运行通过,你可以试试。。。。。。
作者: 申振华    时间: 2012-3-22 03:52
田斌 发表于 2012-3-22 02:03
public static void method(T t)//报错,提示静态方法method泛型T无法引用,为什么?
        {
         ...

public static void<T> method(T t)   //加泛型

哥们,泛型加在返回类型前,写代码仔细点,要不然找错的时候你要崩溃的。
public static <W> void method(W w)
作者: 刘元霄    时间: 2012-3-22 04:03
public static void method(T t)//报错,提示静态方法method泛型T无法引用
  静态方法必须得重新加泛型!
因为静态方法在没有创建对象的时候就已经存在了,所以静态方法不可以访问类上定义的泛型。
如果静态方法操作数据类型不确定的话,可以将泛型定义在方法上。
public static <T> void method(T t)  就行了!
作者: 申振华    时间: 2012-3-22 04:05
public static void method(T t)//报错,提示静态方法method泛型T无法引用,为什么?

因为在实例化对象时,静态方法根本就还没有指定你的泛型,所以会报错。
解决办法:
定义成普通方法:public void method(T t)
定义一个静态泛型方法:public static <W> void method(W w)  //切记:在使用静态方法时,泛型定义在方法上,不能和类定义的泛型一致。




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