У меня есть класс Context. Он должен быть передан и использован в другом конструкторе класса - называется, скажем, менеджером. Но переменная контекста должна быть также реализацией MyInterface, которая обязывает реализовать requireMethod(). Поэтому я хотел бы быть что-то вроде:Параметр метода - одновременно требует как класс, так и интерфейс
class Manager {
Manager(Context context) {
context.doSomeStandardContextStuff();
if (context instanceof MyInterface) {
context.requiredMethod()
}
}
}
Однако составитель и IDE сказать мне, что requiredMethod() не может быть решена.
Итак, я обязан решить эту проблему, чтобы создать «искусственный» другой класс, который простирается от класса Context и реализует MyInterface - только для того, чтобы использовать его как один объект в конструкторе выше? Или есть лучшее решение для этого?
Редактировать: Хорошо, спасибо вам, ребята, за очень интересную дискуссию и помощь в изучении новых вещей.
Чтобы увидеть код работает с кастинг на интерфейсной подход, смотрите здесь (легко собрать и запустить онлайн): http://www.tutorialspoint.com/compile_java_online.php?PID=0Bw_CjBb95KQMekxoTU4zV0JFVms
try: ((MyInterface) context) .requiredMethod() – ByeBye
В вашем операторе 'if' вы можете гарантировать, что' context' является 'MyInterface', поэтому просто добавьте его:' ((MyInterface) context) .requiredMethod() ' – Zircon
Не могли бы вы переопределить' doSomeStandardContextStuff() 'на этом объекте, чтобы он дополнительно вызывал' requiredMethod() 'изнутри? Ваш пример довольно загадочный, поэтому я не уверен, что он подойдет. – 4castle