经常会写一些工具类,包含静态方法,比如要针对 List< T> 某组元素进行截取等操作。事实上,不能在静态方法的参数中引用泛型。这与线程安全有关。

  静态方法在 JVM 的 ClassLoder 阶段被写到内存的方法区,有且只有一份,在多线程之间对象共享,包括静态方法的类型参数在方法区中只有一份,也是对象共享。如果使用了泛型,当多个对象调用静态方法先后注入String、Integer类型参数,那么该静态方法的类型参数最后保存的是Integer类型,此时,先前调用静态方法的对象将会因为类型不匹配,而爆发运行时异常。当然,为了杜绝这种错误,一开始就会提示不能在静态方法中使用泛型。

  我见过有将类型参数声明为 Object 的情况,Obejct 通用对象,但我总觉得不安全。我常用的做法是声明为固定的类型,如String、Integer,根据参数类型的不同,多写几个静态方法。

  参考:

版权声明:转载请注明出处 http://zhoupq.com/静态方法的参数不能引用泛型/