Я использую библиотеку GWT. Существует базовый класс Widget, от которого наследуются все виджеты. Некоторые виджеты реализуют определенные интерфейсы (например, HasText), другие - нет. Иногда я хочу гарантировать, что что-то, передаваемое в качестве аргумента функции, имеет определенный класс И реализует определенный интерфейс.
Например, я хочу иметь функцию, которая принимает аргумент X, где X имеет тип класса Widget И типа интерфейса HasText. Я хочу иметь такое поведение, потому что в контейнеры макета могут быть добавлены только виджеты, а HasText определяет полный набор поведений, которые мне действительно нужны из указанного виджета.
В форме псевдокода это может быть:
public void fx(I_AM_A_Widget_AND_IMPLEMENT_INTERFACE_HasText x){
//do stuff with x, which is guaranteed to be a Widget AND implement HasText
}
Это возможно в Java? Если есть несколько способов сделать это, есть ли предпочтительный / лучший способ?