Java泛型方法签名解释

22

这个泛型方法签名是什么意思?

public <S, D> D map(S sourceObject, java.lang.Class<D> destinationClass);
我指的是<S, D>
此方法返回与第二个参数相同类型的对象。

我能不能只写

public D map(S sourceObject, java.lang.Class<D> destinationClass);

1
什么是不同之处? - Keppil
3
这就是为什么“复制粘贴”很危险的原因。 - Maroun
3
太多粘贴,不够剪切。 - Dave Newton
1
让我猜猜,第二个应该写成 public <D> D map(Object sourceObject, java.lang.Class<D> destinationClass);。它的意思是一样的,类型参数 S 是不必要的。 - qqilihq
1
好的,各位。评论区里没有什么可看的了。我编辑了原始问题。谢谢。 - Bick
3个回答

19

这意味着这个方法调用需要两个类型参数:S和D。

<S, D> 是声明该方法是泛型的,并且需要两个类型参数,这些参数在方法签名中作为占位符使用。

当你调用该方法时,可以传递这些参数,或者根据传递的参数表达式推断出参数类型,例如:

String val = map(10, String.class);

在这种情况下,S是整数,D是字符串


1
你需要解释得更多一些 :( - Maroun

4
我猜在您进行更正之后仍然存在一个错误(如果它也包含类型参数,您需要向我们展示整个类),但我猜我理解了您的问题;正如评论中已经指出的那样,您可以简单地摆脱S 类型参数,因为它只在方法签名中被使用了一次,并将其替换为Object。 简化后的代码如下:
public <D> D map(Object sourceObject, java.lang.Class<D> destinationClass);

2

<S, D>表示该方法是通用的(独立于类)。获取类型为S和类DClass<D>)的参数。并返回类型为D的值 - 独立于其他类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接