繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM