返回的方法<t extends =“”baseclass =“”>&amp;基类</T>

时间:2013-07-22 14:34:38

标签: java generics

这两种方法签名之间有什么区别

  1. public <T extends BaseClass> T myMethod(String p1, String p2) {}

  2. public BaseClass myMethod(String p1, String p2) {}

  3. 哪一种更好,哪些是适合使用它们的地方。

    好吧我知道泛型,我问这个问题的原因是两个方法都可以返回基类的扩展,我遇到了一段使用泛型版本的代码,我试图弄清楚为什么?< / p>

1 个答案:

答案 0 :(得分:6)

1.下的签名将使您免于将方法的返回值向下转换为BaseClass的特定子类。但是,它本质上是类型不安全的,因为T仅从调用此方法的表达式的类型推断出来。换句话说,T是“你想要的任何东西”,由于该方法返回一个确定类型的对象,它显然无法工作。

如果你对方法有一个T - 类型参数,或者T作为这种参数的类型参数,那么这个签名就有意义了;这种方式很少。