【发布时间】:2015-10-07 20:39:27
【问题描述】:
我有一个 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 = ???
}
进行此更改后,程序不再编译,并出现以下错误:
错误:ScalaIntersection 类需要抽象,因为类型 [E <: javax.swing.jcomponent with runnable e trait javaintersection foo>
错误:方法 foo 没有覆盖任何内容。
[INFO] 注意:ScalaIntersection 类的超类包含以下名为 foo 的非最终成员:
[INFO] def foo[E <: javax.swing.jcomponent with runnable e unit>
在 Scala 中有没有一种方法可以实现一个接口,其方法采用一个实现另一个接口的类,而不需要在每个方法上编写整个类型?
【问题讨论】:
标签: java scala inheritance types interface