Scala: утиная типизация
От: ka-5  
Дата: 19.07.09 11:39
Оценка:
Здравствуйте!
Пытаюсь на 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
scala типы
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.