我有一个Runnable抽象类绞盘代表对等对象的套接字。
我必须保留我创建的所有套接字的引用,因此我选择将其包装到用于创建套接字的管理器类中并将其添加到列表中
import java.util.concurrent.Executors
internal interface SocketInterface {
fun onSocketConnected()
}
abstract class Socket(val host: String) : Runnable, SocketInterface {
override fun run() {
//Connected
onSocketConnected()
}
}
abstract class SocketManager : SocketInterface {
private val executorService = Executors.newSingleThreadExecutor()
var sockets = mutableListOf<Socket>()
fun addSocket(host: String) {
//val socket = Socket(host)
executorService.execute(socket)
sockets.add(socket)
}
}
class Main {
val manager = object : SocketManager() {
override fun onSocketConnected() {
//Peer connected correctly
}
}
//add new socket to manager
manager.addSocket('google.com')
}
但行
//val socket = Socket(host)
错误是说不能实例化抽象类。
我希望我的经理在顶层应用程序(主)中实例化之前不关心实现。>
编辑:
我找到了一个临时解决方案,在SocketManager中为抽象方法onSocketConnected实现了默认值]abstract class SocketManager : SocketInterface { private val executorService = Executors.newSingleThreadExecutor() var sockets = mutableListOf<Socket>() override fun onSocketConnected() {/* Log.d('tag', 'uglySolution'*/} fun addSocket(host: String) { //val socket = Socket(host) executorService.execute(socket) sockets.add(socket) } }
但是看起来很丑而不是标准的
我有一个Runnable抽象类绞盘,代表对等方的套接字。我必须保留我创建的所有套接字的引用,因此我选择将其包装到用于创建套接字的管理器类中,然后...
目前,我已经解决了这样的问题。
但是我认为这不是正确的方法,如果您找到任何解决方案,请告诉我。