【问题标题】:"Return type of ... is not a subtype of the return type of the overridden member"?“......的返回类型不是被覆盖成员的返回类型的子类型”?
【发布时间】:2019-06-28 13:48:18
【问题描述】:

我正在尝试子类化一个函数ActionableNotification.java,其内容类似于:

package com.venmo.notifications.notifications;

import android.content.ContextWrapper;
import com.squareup.picasso.Target;

public abstract class ActionableNotification extends ContextWrapper implements Target {

    @NonNull
    protected abstract String getTrackingNotificationCategory();
    // ...
}

继承类读起来类似这样

class DeclineInsufficientFundsBalanceOnlyCardNotification(context : Context, intent : Intent) : ActionableNotification(context, intent) {

    override fun getTrackingNotificationCategory() = ""
    // ...
 }

但是,当我尝试编译时,我得到了这个错误:

/Users/kupeek/dev/venmo-android/p2p-app/src/main/java/com/venmo/notifications/notifications/DeclineInsufficientFundsBalanceOnlyCardNotification.kt: (21, 53): 'getTrackingNotificationCategory' 的返回类型不是 被覆盖成员的返回类型的子类型 '@NonNull protected/protected and package/ abstract fun getTrackingNotificationCategory():字符串定义在 com.venmo.notifications.notifications.ActionableNotification'

看不懂这个错误信息,因为Kotlin继承类的返回类型是字符串,基类也是?

【问题讨论】:

  • 你能分享一下错误的截图以及它在编辑窗口中的位置吗?

标签: java android kotlin


【解决方案1】:

也许用 JetBrains 注释 @NotNull 来注释抽象方法会更好。我发现它正在查看this。希望这对您有所帮助。

【讨论】:

    【解决方案2】:

    虽然我不完全确定为什么会这样,但当我为覆盖函数指定 String 类型而不是依赖类型推断时,错误就消失了:

    override fun getTrackingNotificationCategory(): String = ""
    

    【讨论】:

    • 我用一个最小的例子试了一下,但无法重现。您使用的是哪个版本的 Kotlin?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多