When you realise that you can make non iterable th...
# random
j
When you realise that you can make non iterable things iterable with extension functions
Copy code
class ServerSocketIterator(private val serverSocket: ServerSocket) : Iterator<Socket> {
    override fun hasNext(): Boolean {
        return !serverSocket.isClosed
    }

    override fun next(): Socket {
        return serverSocket.accept()
    }

}

operator fun ServerSocket.iterator(): ServerSocketIterator {
    return ServerSocketIterator(this)
}

fun handle(client: Socket) {

}

fun main(args: Array<String>) {
    val socket = ServerSocket(7070, 8, InetAddress.getLoopbackAddress())

    for (client in socket) {
        handle(client)
    }
}
😄 6