8

我正在浏览commons-chain的代码

我发现了很多类似于这个的方法签名:

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

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

public Command getCommand(String commandID)

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

还有其他一些原因可以说明为什么要在 java 方法的返回类型中 使用和扩展?

4

1 回答 1

4

区别在于三个方面:

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

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

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

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

或者

SomeTypedSubClassOfCommand x = getCommand(commandID);

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

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

Command<String, Integer, String> x = ContainingClass.<CommandSubClass<String, Integer, String>>getCommand(commandID);
于 2013-04-21T00:52:40.883 回答