Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将类实例的代码放在Kotlin的接口中是一个好主意吗?_Kotlin - Fatal编程技术网

将类实例的代码放在Kotlin的接口中是一个好主意吗?

将类实例的代码放在Kotlin的接口中是一个好主意吗?,kotlin,Kotlin,代码A来自项目 作者将实例a类的代码DefaultServiceLocator放在接口ServiceLocator中 在我看来,接口通常不应该包含任何实现代码 将类实例的代码放在Kotlin的接口中是一个好主意吗 代码A interface ServiceLocator { companion object { private val LOCK = Any() private var instance: ServiceLocator? = null

代码A来自项目

作者将实例a类的代码
DefaultServiceLocator
放在
接口ServiceLocator

在我看来,接口通常不应该包含任何实现代码

将类实例的代码放在Kotlin的接口中是一个好主意吗

代码A

interface ServiceLocator {
    companion object {
        private val LOCK = Any()
        private var instance: ServiceLocator? = null


        fun instance(context: Context): ServiceLocator {
            synchronized(LOCK) {
                if (instance == null) {
                    instance = DefaultServiceLocator(
                            app = context.applicationContext as Application,
                            useInMemoryDb = false)
                }
                return instance!!
            }
        }

        /**
         * Allows tests to replace the default implementations.
         */
        @VisibleForTesting
        fun swap(locator: ServiceLocator) {
            instance = locator
        }
    }

    ...
}


open class DefaultServiceLocator(val app: Application, val useInMemoryDb: Boolean) : ServiceLocator {
  ...
}
在我看来,接口通常不应该包含任何实现代码

欢迎从冬眠中归来;)是的,您可以使用interface+抽象类实现同样的功能,但是您也可以在一段时间内使用许多语言将默认实现作为接口的一部分。选择哪种方式取决于您自己,但是如果只有一个抽象类实现了接口,那么为了便于将来的维护,将其合并到一个文件中通常是很方便的

在我看来,接口通常不应该包含任何实现代码


欢迎从冬眠中归来;)是的,您可以使用interface+抽象类实现同样的功能,但是您也可以在一段时间内使用许多语言将默认实现作为接口的一部分。选择哪种方式取决于您自己,但是如果只有一个抽象类实现了接口,那么为了便于将来的维护,将其合并到一个文件中通常是很方便的

根据kotlin接口文件:

Kotlin中的接口可以包含抽象方法的声明以及方法实现。与抽象类不同的是,接口不能存储状态。它们可以有属性,但这些属性必须是抽象的或提供访问器实现


所以。。。在接口上使用方法实现没有问题。该功能可能会为您提供额外的功能(如果您喜欢并需要使用它)。

根据kotlin interfaces文档:

Kotlin中的接口可以包含抽象方法的声明以及方法实现。与抽象类不同的是,接口不能存储状态。它们可以有属性,但这些属性必须是抽象的或提供访问器实现


所以。。。在接口上使用方法实现没有问题。该功能可能会为您提供额外的功能(如果您喜欢并且需要使用它)。

伴生对象是Java中的静态变量/函数,您甚至可以在之前就这样做。伴生对象是Java中的静态变量/函数,您甚至可以在之前就这样做。