我正在浏览commons-chain
的代码我发现了许多与此类似的方法签名:
public <CMD extends Command<K, V, C>> CMD getCommand(String commandID)
此签名与以下内容有何不同:
public Command getCommand(String commandID)
我能理解的唯一合乎逻辑的理由是进行类型检查。但我仍然无法从设计的角度弄清楚这样做的原因。
在java方法的返回类型中,是否有更多理由可以使用 extends ?
答案 0 :(得分: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);