Этот ответ, несомненно, существует на SO, но я не нашел правильной комбинации поисковых терминов, чтобы придумать это.
У меня есть метод, который я хочу взять с параметром класса A, но также реализует интерфейс B. Как мне это сделать?
например
public class MySubclassWithInterface extends MyClass implements MyInterface { }
public class MySubclass extends MyClass { }
public class MyInterfaceClass implements MyInterface { }
public class MyOtherSubclassWithInterface extends MyClass implements MyInterface { }
Из трех классов выше я хочу, чтобы мой метод принимал объект MyClass
и реализовал MyInterface
, другими словами, либо MySubclassWithInterface
либо MyOthersubclassWithInterface
но не MySubclass
или MyIntefaceClass
Я очень застенчиво пробовал следующее, что явно не получилось:
public void myMethod( (MyClass MyInterface) parameterName) {
...
}
Заранее благодарны за Вашу помощь.
Вы можете выразить это с помощью типового типа, как в следующей подписи:
<T extends MyClass & MyInterface> void m(T p)
Правило состоит в том, что первый тип должен быть классом или интерфейсом, и любой следующий параметр должен быть типом интерфейса.