Здравствуйте!
Пытаюсь на Scala сделать некое подобие утиной типизации для Java-классов из SWT.
Классы имеют одинаково названные методы, но не имеют общих интерфейсов с этими методами.
Например такой код замечательно работает для разных классов с одинаковой сигнатурой метода setSelection(s:Int):
def selection(target:{def setSelection(s:Int)}, source:Int) = {
target.setSelection(source)
}
(по аналогии с:
http://johlrogge.wordpress.com/2009/01/06/making-swt-shine-with-scala/)
Однако если я пытаюсь параметризовать тип:
def selection[A](target:{def setSelection(s:A)}, source:A) = {
target.setSelection(source)
}
то компилятор ругается:
Parameter type in structural refinement may not refer to abstract type defined outside that same refinement
Это как-нибудь можно обойти?
Или придётся писать что-то подобное:
def selectionInt(target:{def setSelection(s:Int)}, source:Int) = {
target.setSelection(source)
}
def selectionStr(target:{def setSelection(s:String)}, source:String) = {
target.setSelection(source)
}
def selectionBool(target:{def setSelection(s:Boolean)}, source:Boolean) = {
target.setSelection(source)
}
20.07.09 13:59: Перенесено модератором из 'Java' — Blazkowicz