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

sho*_*hik 8 java

我正在浏览公共链的代码

我找到了很多方法签名,类似于这个:

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

这个签名有何不同之处:

public Command getCommand(String commandID)

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

是否有更多理由可以使用和扩展 java方法的返回类型?

Boh*_*ian 4

区别有三倍:

  1. 返回的类型是类型化的(不是原始类型)
  2. 返回的类型可以是特定的子类
  3. 该方法可以访问类型 K、V 和 C

作为一种类型化方法,java 可以推断类型

所有这一切都意味着这将编译(无需强制转换):

Command<String, Integer, String> x = getCommand(commandID);
Run Code Online (Sandbox Code Playgroud)

或者

SomeTypedSubClassOfCommand x = getCommand(commandID);
Run Code Online (Sandbox Code Playgroud)

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

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

Command<String, Integer, String> x = ContainingClass.<CommandSubClass<String, Integer, String>>getCommand(commandID);
Run Code Online (Sandbox Code Playgroud)