我在Facebook上看过这个课程sdk:
+--------+---------------------+
| Owner | Devices(LIKE result)|
+--------+---------------------+
| Peter | laptop |
| Joe | laptop |
| Eugene | laptop |
+--------+---------------------+
3 rows in set (0.00 sec)
我希望在Kotlin中有一个接受它的父类的方法,类似于以下内容:
public final class ShareDialog extends
FacebookDialogBase<ShareContent, Sharer.Result>
但是当我尝试将其称为java:
fun shareToFacebook(shareDialog: FacebookDialogBase<ShareContent<*, *>, Sharer.Result>,
activity: Activity)
我得到编译时错误:
tournamentPresenter.shareToFacebook(new ShareDialog(this), this);
P.S。我知道最好不向演示者提供分享对话,我不打算这样做,让我们把它作为问题的一个例子
答案 0 :(得分:0)
问题是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);
事情应该仍然有相同的效果。