2013-07-17 2 views
5

Я хочу, чтобы написать функцию, как это:Как написать функцию, которая выполняет оператор case с общим типом?

def genericCase[T]() : PartialFunction[Any, T] = { 
    case Wrapper(_, item: T) => item 
    case Wrapper(item: T, _) => item 
} 

В словах, я хочу способ повторного использования структуры матча картины с различными типами.
Компилятор сообщает мне, что из-за стирания типа case x: T никогда не будет соответствовать. Что является альтернативой для такого рода типичных случаев? Я также пытался использовать типы в API-интерфейсе отражения в качестве аргумента функции, но мы не могли понять этого.

ответ

5

Все, что вам нужно, это добавить неявную ClassTag, которая позволяет соответствовать на общий класс:

import scala.reflect.ClassTag 

def genericCase[T: ClassTag]() : PartialFunction[Any, T] = { 
case Wrapper(_, item: T) => item 
case Wrapper(item: T, _) => item 
} 
Смежные вопросы