У меня есть интерфейс Java, который использует тип пересечения, как это:типа пересечения с определением типа
public interface JavaIntersection{
public <E extends JComponent & Runnable> void foo(E arg);
}
, и я пытаюсь создать класс Scala, который реализует этот интерфейс. Поэтому я написал следующее:
class ScalaIntersection extends JavaIntersection{
override def foo[E <: JComponent with Runnable](arg:E):Unit = ???
}
Это работает, но, в полной программе, которую я пишу, этот тип привыкает в нескольких местах. Привлечение полного типа каждый раз было бы довольно утомительным. Таким образом, я изменил класс вроде этого:
class ScalaIntersection extends JavaIntersection{
type RunnableComponent <: JComponent with Runnable
override def foo(arg:RunnableComponent):Unit = ???
}
С этим изменением программы больше не компилирует, со следующими ошибками:
error: class ScalaIntersection needs to be abstract, since method foo in trait JavaIntersection of type [E <: javax.swing.JComponent with Runnable](arg: E)Unit is not defined
error: method foo overrides nothing.
[INFO] Note: the super classes of class ScalaIntersection contain the following, non final members named foo:
[INFO] def foo[E <: javax.swing.JComponent with Runnable](arg: E): Unit
Есть ли способ в Scala для реализации интерфейса метод которого принимает класс, реализующий другой интерфейс, без необходимости писать весь тип для каждого метода?