我正在 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 级别使用 ,也相当于?
通配符。由于 aFacebookDialogBase<ShareContent, Sharer.Result>
不可分配给 aFacebookDialogBase<ShareContent<?, ?>, Sharer.Result>
您的呼叫失败。
但是,使用原始类型应该在语义上等同于使用通配符作为类型参数。所以你可以做一个重新解释演员的通用等价物:
FacebookDialogBase<ShareContent<?, ?>, Sharer.Result> myVar = (FacebookDialogBase) new ShareDialog(this);
tournamentPresenter.shareToFacebook(myVar, this);
事情应该仍然几乎相同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句