Kotlin中的Java泛型:在Kotlin中使用Java raw类型作为方法参数

我正在Facebook的SDK中看这个类:

public final class ShareDialog extends FacebookDialogBase<ShareContent, Sharer.Result> 

我想在Kotlin中有一个方法接受它的父类,类似于以下内容:

 fun shareToFacebook(shareDialog: FacebookDialogBase<ShareContent<*, *>, Sharer.Result>, activity: Activity) 

但是当我尝试调用它的形式java:

 tournamentPresenter.shareToFacebook(new ShareDialog(this), this); 

我得到编译时错误:

Error:(751, 45) error: incompatible types: ShareDialog cannot be converted to FacebookDialogBase<ShareContent<?,?>,Result>

PS我知道最好不要给主持人分享对话,我不打算这样做,我们只是用它作为问题的一个例子

问题是使用原始类型的ShareDialog类的签名。

 public final class ShareDialog extends FacebookDialogBase<ShareContent, Sharer.Result> .................................^^^^^^^^^^^^ 

而且,即使Kotlin文档说要使用* ,在相当于VM级别? ,通配符。 由于FacebookDialogBase<ShareContent, Sharer.Result>不可分配给FacebookDialogBase<ShareContent<?, ?>, Sharer.Result>您的呼叫失败。

但是,使用原始类型应该在语义上等同于使用通配符作为类型参数。 所以你可以做一个重新解释演员的通用等价物:

 FacebookDialogBase<ShareContent<?, ?>, Sharer.Result> myVar = (FacebookDialogBase) new ShareDialog(this); tournamentPresenter.shareToFacebook(myVar, this); 

而且事情应该还是一样的。