https://kotlinlang.org logo
g

groostav

02/01/2017, 11:14 AM
I think the best way to reduce that boiler plate is with a base class
Copy code
interface Node { 
  fun accept(visitor:visitor)
}
class NodeBase(visit: (Visitor) -> Unit){
  children: List<Node>

  override final fun accept(visitor: Visitor){
    visit(visitor)
    children.foreach { it.accept(visitor) }
  }
}

class NodeImpl1: NodeBase({ it.visit(this) })
class NodeImpl2: NodeBase({ it.visit(this) })