【发布时间】:2013-07-24 18:26:35
【问题描述】:
我收到以下两种方法的双重定义错误:
def apply[T](state: T, onRender: T => Graphic,
onMouseEvent: (MouseEvent, T) => T): GraphicPanel =
apply(state, onRender, onMouseEvent = Some(onMouseEvent))
和
def apply[T](state: T, onRender: T => Graphic,
onKeyEvent: (KeyEvent, T) => T): GraphicPanel =
apply(state, onRender, onKeyEvent = Some(onKeyEvent))
对于更通用的apply 方法,它们都是带有签名的方法重载:
def apply[T](state: T, onRender: T => Graphic,
onTickEvent: Option[T => T] = None, fps: Int = 30,
onMouseEvent: Option[(MouseEvent, T) => T] = None,
onMouseMotionEvent: Option[(MouseEvent, T) => T] = None,
onMouseInputEvent: Option[(MouseEvent, T) => T] = None,
onKeyEvent: Option[(KeyEvent, T) => T] = None)
我会假设即使类 KeyEvent 和 MouseEvent 有一个共同的超类 (InputEvent),编译器仍然应该能够区分它们。但是,它正在抛出错误:
双重定义:方法 apply:[T](state: T, onRender: T => edu.depauw.scales.graphics.Graphic,someOnKeyEvent: (java.awt.event.KeyEvent, T) => T)edu.depauw.scales.graphics.GraphicPanel 和方法 apply:[T](state: T,onRender:T => edu.depauw.scales.graphics.Graphic,onMouseEvent: (java.awt.event.MouseEvent, T) => T)edu.depauw.scales.graphics.GraphicPanel 在第 115 行具有相同的类型 擦除后:(状态:对象,onRender:Function1,someOnKeyEvent: Function2) edu.depauw.scales.graphics.GraphicPanel
有人知道发生了什么吗?诚然,我不知道短语“擦除后”是什么意思,所以解释一下它的工作原理可能会有所帮助。
【问题讨论】:
标签: scala types compiler-errors overloading