黑马程序员技术交流社区

标题: 为什么静态方法等中不允许使用类型形参?还有instanceof [打印本页]

作者: HM谢文辉    时间: 2013-3-26 14:04
标题: 为什么静态方法等中不允许使用类型形参?还有instanceof
本帖最后由 HM谢文辉 于 2013-3-26 19:00 编辑

为什么静态方法、静态初始化或者静态变量的声明和初始化中不允许使用类型形参?错误代码:
  1. public class R<T>
  2.         {
  3.                 static T info;
  4.                 public void foo(T msg){}
  5.                 public static void bar(T msg){}
  6.         }
复制代码
instanceof运算符后不能使用泛型类?错误代码:
  1. List<String> list = new ArrayList<String>();
  2. if(list instanceof List<String>){}
复制代码

作者: 董延京    时间: 2013-3-26 18:29
1.我看了一下eclipse给提示的信息,错误是:无法构造一个静态的变量info通过一个非静态的参考T。
2.  第二个应该是:  List<String> list = new ArrayList<String>();
                            if(list instanceof List<?>){};
我觉得应该是泛型在编译成为字节码后,字节码中是没有泛型的,所以静态变量伴随着字节码同时加载,而静态变量需要使用到这个泛型事实上是没有被给予的。所以报了错误,第二个我想也能用这个解释。
作者: 谢冬    时间: 2013-3-26 18:45
疯狂java。。。嘿嘿




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