class JsonObject() { } class JsonArray() { } public interface Formatter { public fun format(source: IN?): OUT } public interface MultiFormatter { public fun format(source: Collection): OUT } public class Project() { } public interface JsonFormatter: Formatter, MultiFormatter { public override fun format(source: Collection): JsonArray { return JsonArray(); } } public class ProjectJsonFormatter(): JsonFormatter { public override fun format(source: Project?): JsonObject { return JsonObject() } } fun box(): String { val formatter = ProjectJsonFormatter() return if (formatter.format(Project()) != null) "OK" else "fail" }