黑马程序员技术交流社区
标题:
关于泛型的问题
[打印本页]
作者:
唐巍
时间:
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