[英]Java generics in Kotlin: Use Java raw type as method parameter in Kotlin
我在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 doc说使用*
,在VM级别上相当于?
,一个通配符。 由于FacebookDialogBase<ShareContent, Sharer.Result>
不能分配给FacebookDialogBase<ShareContent<?, ?>, Sharer.Result>
您的呼叫失败。
但是,使用原始类型应该在语义上等同于使用通配符作为类型参数。 所以你可以做一个重新解释演员的通用等价物:
FacebookDialogBase<ShareContent<?, ?>, Sharer.Result> myVar = (FacebookDialogBase) new ShareDialog(this);
tournamentPresenter.shareToFacebook(myVar, this);
事情应该仍然是相同的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.