用可见性修饰符覆盖接口成员函数的正确语法是什么?

水冷却器v2

我想问一下,这两个页面(界面上的页面可见性修饰符上的页面)都没有提供我所追求的语法示例。

我有一个像这样的界面:

package bookyard.contracts;

public interface IAuthenticationManager<T> {
    fun authenticateUser(userName: String, password : String,
                            appId: String, appSecret : String) : OperationResult<T>;
}

我正在为此编写一个实现,但是下面列出的三种语法都没有用。每次,编译器都会报告以下错误:

  1. 'authenticateUser'不会覆盖任何内容

  2. 类'DatabaseAuthenticationManager'必须声明为抽象或实现抽象成员public abstract fun authenticateUser(userName:String,password:String,appId:String,appSecret:String):在bookyard.contracts.IAuthenticationManager中定义的OperationResult

package bookyard.server.util

import bookyard.contracts.IAuthenticationManager;

public class DatabaseAuthenticationManager :  IAuthenticationManager<User> {

    /* override public fun authenticateUser(userName : String?,
                                password : String?,
                                appId : String?,
                                appSecret : String?) : OperationResult<User> {
    }

    public override fun authenticateUser(userName : String?,
                                password : String?,
                                appId : String?,
                                appSecret : String?) : OperationResult<User> {
    }

    public fun authenticateUser(userName : String?,
                                password : String?,
                                appId : String?,
                                appSecret : String?) : OperationResult<User> {
    } */
}
裤子

您的问题是,在尝试实现接口时,您正在使用可为空的字符串。

Kotlin的有关null安全性的文档中...

在Kotlin中,类型系统区分可以保存null的引用(可为空的引用)和不能保存null的引用(非null引用)。

String?(可为null的字符串),并且KotlinString认为它们是不同的类型因此,编译器认为您尚未实现该方法。

您的选择...

您有2个选择:

  1. 更新您的接口以使用可为空的参数(通过?在每种类型的末尾添加)。

  2. 更新您的实现以使用不可为空的参数(String)。

我认为选项2稍微干净一点,因为它不会破坏该接口的任何其他现有实现。

示例(针对选项2):

接口保持不变。

这是新的实现...

package bookyard.server.util

import bookyard.contracts.IAuthenticationManager

class DatabaseAuthenticationManager : IAuthenticationManager<User> {

    override fun authenticateUser(userName : String,
                                  password : String,
                                  appId : String,
                                  appSecret : String) : OperationResult<User> {
        // Your implementation...
    }
}

您可以看到我所做的就是将每个参数从更改String?String

笔记:

  • 默认情况下类/字段/接口是公共的public不需要关键字。

  • Kotlin具有分号推断,因此您无需自己添加分号。极少数情况下,您实际上要这样做,但是编译器会提前警告您。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

私有类内部的可见性修饰符有什么区别?

来自分类Dev

私有类内部的可见性修饰符有什么区别?

来自分类Dev

实体构造函数声明以及函数签名和可见性修饰符之间的语句

来自分类Dev

如何告诉clang格式缩进可见性修饰符?

来自分类Dev

包结构是否有任何Java模式可证明存在默认可见性修饰符?

来自分类Dev

注释处理器:如何知道 Kotlin 类是否被 Element 标记为“内部”可见性修饰符

来自分类Dev

默认的构造函数访问修饰符是什么?

来自分类Dev

OOP成员变量可见性

来自分类Dev

如何覆盖标签可见性?

来自分类Dev

为什么没有修饰符的字段在子类中可见?

来自分类Dev

为什么没有修饰符的字段在子类中可见?

来自分类Dev

访问修饰符-目的是什么?

来自分类Dev

包修饰符的意义是什么?

来自分类Dev

包修饰符的意义是什么?

来自分类Dev

枚举实现接口,接口和方法的可见性

来自分类Dev

枚举实现接口,接口和方法的可见性

来自分类Dev

为什么非成员函数不允许使用类似const的修饰符

来自分类Dev

使用EnableDelayedExpansion时,变量修饰符的语法正确

来自分类Dev

为什么可以更改虚拟成员或公共基类的可见性?

来自分类Dev

成员函数的const修饰符如何影响重载解析?

来自分类Dev

Java中默认构造函数的访问修饰符是什么?

来自分类Dev

为什么以下用于切换两个容器的可见性的代码不起作用,正确的方法是什么?

来自分类Dev

为什么以下用于切换两个容器的可见性的代码不起作用,正确的方法是什么?

来自分类Dev

Spark作业中的Scala成员字段可见性

来自分类Dev

如何设置给定集群对特定成员的可见性

来自分类Dev

React.js处理可见性=隐藏的方式是什么?

来自分类Dev

XML的可见性是什么?尺寸,字符串等(Android)

来自分类Dev

在Java中以静态单例访问的变量的内存可见性是什么?

来自分类Dev

为多个控件分配可见性的最佳方法是什么

Related 相关文章

  1. 1

    私有类内部的可见性修饰符有什么区别?

  2. 2

    私有类内部的可见性修饰符有什么区别?

  3. 3

    实体构造函数声明以及函数签名和可见性修饰符之间的语句

  4. 4

    如何告诉clang格式缩进可见性修饰符?

  5. 5

    包结构是否有任何Java模式可证明存在默认可见性修饰符?

  6. 6

    注释处理器:如何知道 Kotlin 类是否被 Element 标记为“内部”可见性修饰符

  7. 7

    默认的构造函数访问修饰符是什么?

  8. 8

    OOP成员变量可见性

  9. 9

    如何覆盖标签可见性?

  10. 10

    为什么没有修饰符的字段在子类中可见?

  11. 11

    为什么没有修饰符的字段在子类中可见?

  12. 12

    访问修饰符-目的是什么?

  13. 13

    包修饰符的意义是什么?

  14. 14

    包修饰符的意义是什么?

  15. 15

    枚举实现接口,接口和方法的可见性

  16. 16

    枚举实现接口,接口和方法的可见性

  17. 17

    为什么非成员函数不允许使用类似const的修饰符

  18. 18

    使用EnableDelayedExpansion时,变量修饰符的语法正确

  19. 19

    为什么可以更改虚拟成员或公共基类的可见性?

  20. 20

    成员函数的const修饰符如何影响重载解析?

  21. 21

    Java中默认构造函数的访问修饰符是什么?

  22. 22

    为什么以下用于切换两个容器的可见性的代码不起作用,正确的方法是什么?

  23. 23

    为什么以下用于切换两个容器的可见性的代码不起作用,正确的方法是什么?

  24. 24

    Spark作业中的Scala成员字段可见性

  25. 25

    如何设置给定集群对特定成员的可见性

  26. 26

    React.js处理可见性=隐藏的方式是什么?

  27. 27

    XML的可见性是什么?尺寸,字符串等(Android)

  28. 28

    在Java中以静态单例访问的变量的内存可见性是什么?

  29. 29

    为多个控件分配可见性的最佳方法是什么

热门标签

归档