Здравствуйте!
Пытаюсь на 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
Лучше перенести сразу в форум
http://www.rsdn.ru/forum/decl/, здесь никто все = не ответит
Здравствуйте, ka-5, Вы писали:
K5>Здравствуйте!
K5>Пытаюсь на Scala сделать некое подобие утиной типизации для Java-классов из SWT.
K5>Классы имеют одинаково названные методы, но не имеют общих интерфейсов с этими методами.
K5>Например такой код замечательно работает для разных классов с одинаковой сигнатурой метода setSelection(s:Int):
Посмотрите тут:
http://www.nabble.com/Cyclic-references---Specifying-a-numeric-type-td19142580.html