静态方法中的有界类型参数

时间:2020-02-13 19:47:25

标签: java generics

这两种方法等效吗?

public static <T extends com.google.protobuf.Message> Any pack(T message) {}
public static Any pack(com.google.protobuf.Message message) {}

我的理解是,在第一个函数中,T仅适用于该静态方法,不适用于其他静态方法或类。因此,它只是将输入参数限制为Message的子类型。是这样吗?如果是这样,这两种方法是否等效?

1 个答案:

答案 0 :(得分:0)

是的,假设调用者未提供明确的类型见证者,则这两个签名是等效的。这是因为在没有类型见证人的情况下,两个签名都接受相同的参数集:

  • 第一个签名接受的任何参数都必须是T的实例,并且TMessage的子类型,因此该参数也必须是{{ 1}},并且被第二个签名接受
  • 第二个签名接受的任何参数都必须是Message的实例,因此,如果选择MessageT