我有一个 interface
像这样 :
interface ClientRequestListener {
fun onLoadStub(name: String)
fun onClientNeeded(id: String, email: String)
}
但是当在一个类上实现它时,我只需要
onClientNeeded
有什么办法可以避免重写这两种方法?我试图创建另一个接口(interface)来扩展那个接口(interface),但仍然要求我实现这些方法..
澄清
我正在使用一个外部库,它使用这两种方法的接口(interface),问题是我使用它的地方我只需要一种方法而不是两种方法,而不是让覆盖做任何我只想知道的事情避免我不需要的额外覆盖的方法。
编辑
fun doSomeMagic(name: String, clientRequestListener: ClientRequestListener? = null) =
LibraryRequest.getClient(name)
.withListener(object : LibraryInterface() {
override fun onLoadStub(name: String) {
clientRequestListener?.onLoadStub(name)
}
override fun onClientNeeded(id: String, email: String) {
clientRequestListener?.onClientNeeded(id, email)
}
})
所以当我使用这种方法时,我会做这样的事情:
doSomeMagic("Charls", object : ClientRequestListener {
override fun onClientNeeded(name: String) {
//I'm not doing nothing here
}
override fun onClientNeeded(id: String, email: String) {
//Do something with the id and email
}
})
所以我想做的只是调用
onClientNeeded
而不是他们两个。
最佳答案
您可以在此处通过几个选项进行更改:
a)您可以创建一个抽象类,它将提供不需要的方法的默认(空)实现,并强制您仅覆盖您感兴趣的方法:
abstract class AbsClientRequestListener {
override fun onLoadStub(name: String) {
}
abstract fun onClientNeeded(id: String, email: String)
}
b) 如果您有一个层次结构的类,您可以在您的基类中提供一个默认实现并保留
onClientNeeded
子类未实现:interface ClientRequestListener {
fun onLoadStub(name: String)
fun onClientNeeded(id: String, email: String)
}
abstract class BaseClient: ClientRequestListener {
override fun onLoadStub(name: String) {
// Leave empty
}
}
class Client:BaseClient() {
override fun onClientNeeded(id: String, email: String) {
// Put required implementation
}
}
c)或者您可以按原样使用此接口(interface)并每次都提供一个空实现:)
编辑
在您的具体情况下,您可以添加类
ClientRequestListenerAdapter
:abstract class ClientRequestListenerAdapter : ClientRequestListener {
override fun onLoadStub(name: String) {
}
}
并像这样使用它:
doSomeMagic("Charls", object : ClientRequestListenerAdapter {
override fun onClientNeeded(id: String, email: String) {
//Do something with the id and email
}
})
功能没有变化
doMagic
是需要的。
关于java - 如何在接口(interface)隔离上实现 SOLID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60812197/