Некоторое время назад я спросил, как заставить класс реализовать интерфейс, который это не реализуется декларацией.
Одна из возможностей - as
-принуждение:
interface MyInterface {
def foo()
}
class MyClass {
def foo() { "foo" }
}
def bar() {
return new MyClass() as MyInterface
}
MyInterface mi = bar()
assert mi.foo() == "foo"
Теперь, когда я пытаюсь использовать его, я не знаю, какой интерфейс нужен во время компиляции. Я пробовал использовать такие дженерики:
interface MyInterface {
def foo()
}
class MyClass {
def foo() { "foo" }
}
class Bar {
public static <T> T bar(Class<T> type) {
return new MyClass() as T
}
}
MyInterface mi = Bar.bar(MyInterface.class)
assert mi.foo() == "foo"
Но возникает следующее исключение:
Cannot cast object 'MyClass@5c4a3e60' with class 'MyClass' to class 'MyInterface'
Как я могу принудительно перейти к интерфейсу, который известен только во время выполнения?
bar
из кода Java, поэтому он уже должен возвращать правильный тип. - person Erik Hofer   schedule 26.01.2017