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);
而且事情应该还是一样的。