代码之家  ›  专栏  ›  技术社区  ›  Kurt Peek

“返回类型…不是被重写成员的返回类型的子类型吗?”

  •  0
  • Kurt Peek  · 技术社区  · 6 年前

    我正试图对一个函数进行子类划分 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() = ""
        // ...
     }
    

    但是,当我尝试编译时,会得到以下错误:

    /用户/ KuPee/Dev/VunMo Android /P2P APP/SRC/主/ Java/COM/VunM/通知/通知/拒绝FunsBalax OnCaldNoTimeCICT.KT: (21,53):“GetTrackingNotificationCategory”的返回类型不是 重写成员“@nonnull”的返回类型的子类型 受保护的/ 受保护和打包 抽象的乐趣 getTrackingNotificationCategory():中定义的字符串 com.venmo.notifications.notifications.actionablenotification'

    我不理解这个错误消息,因为Kotlin继承类的返回类型是字符串,而基类也是字符串?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Wang    6 年前

    也许用JetBrains注释来注释抽象方法 @NotNull 会更好。我看了一眼 this . 希望这对你有帮助。

        2
  •  0
  •   Kurt Peek    6 年前

    虽然我不完全确定这为什么有效,但是当我指定 String 重写函数的类型,而不是依赖类型推断:

    override fun getTrackingNotificationCategory(): String = ""