次の 2 つのメソッドで二重定義エラーが発生します。
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 115 行目の .depauw.scales.graphics.GraphicPanel は、消去後に同じ型になります: (state: Object, onRender: Function1, someOnKeyEvent: Function2) edu.depauw.scales.graphics.GraphicPanel
何が起こっているのか誰にも分かりますか?確かに、 「消去後」というフレーズの意味がわからないので、それがどのように機能するかの説明が役立つかもしれません。