在java方法签名中使用return类型扩展关键字

时间:2013-04-20 23:40:23

标签: java

我正在浏览commons-chain

的代码

我发现了许多与此类似的方法签名:

public <CMD extends Command<K, V, C>> CMD getCommand(String commandID)

此签名与以下内容有何不同:

public Command getCommand(String commandID)

我能理解的唯一合乎逻辑的理由是进行类型检查。但我仍然无法从设计的角度弄清楚这样做的原因。

在java方法的返回类型中,是否有更多理由可以使用 extends

1 个答案:

答案 0 :(得分:4)

差异有三个:

  1. 返回的类型是类型(不是原始类型)
  2. 返回的类型可以是特定的子类
  3. 该方法可以访问类型K,V和C
  4. 作为一个类型化的方法,java可以推断出类型

    所有这些意味着这将编译(没有强制转换):

    Command<String, Integer, String> x = getCommand(commandID);
    

    SomeTypedSubClassOfCommand x = getCommand(commandID);
    

    编译器将根据分配结果的变量类型推断(即计算出)方法的类型。

    此外,您可以使用以下语法显式指定子类:

    Command<String, Integer, String> x = ContainingClass.<CommandSubClass<String, Integer, String>>getCommand(commandID);