abstract class Msg : Serializable class Bla : Msg class Blubb : Msg abstract class CrudDao(sessionFactory: SessionFactory) : AbstractDAO(sessionFactory) class BlaDao : CrudDao class BlubbDao : CrudDao fun storeMsg(dao: CrudDao, msg: T) { dao.persist(msg) } val daos = listOf(BlaDao(), BlubbDao()) val Broker = Broker({ msg : Msg -> val dao = daos.filter(...).single() storeMsg(dao, msg) })