0
Некоторое время назад я спросил, как to make a class implement an interface that it doesn't implement by declaration.Groovy принуждение к интерфейсу неизвестно во время компиляции
Одной из возможностей является as
-coercion:
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 '[email protected]' with class 'MyClass' to class 'MyInterface'
Как я могу принуждать к интерфейсу, который известен только во время выполнения?
Добавить ключевое слово «как» во время литья Bar.bar (MyInterface.class) в качестве MyInterface –
мне нужно, чтобы быть в состоянии назвать 'bar' из Java кода, так что он должен вернуть правильный тип уже. –