2013-11-15 5 views
5

Возможно ли с помощью сопоставления с образцом определить подтип класса, который не является классом case?Совпадение шаблонов без классов классов

Мне нужно использовать существующие классы Java, поэтому я не могу объявить свои собственные классы case.

ответ

8

Да! Вы можете сопоставить шаблон по типу, поэтому, если у вас разные случаи для разных подтипов, вы можете получить повод, который вы ищете:

trait A 
class B extends A 
class C extends A 

def f(a: A) = a match { 
    case b: B => "a B!" 
    case c: C => "a C!" 
} 

f(new B) // a B! 
f(new C) // a C! 
+0

Это выглядит великолепно, спасибо! Благодаря вам я нашел, что это называется «сопоставление типов» или typecase - есть дополнительная информация [здесь] (http://lampwww.epfl.ch/~emir/bqbase/2006/10/11/typecase.html) – goncalopp

+0

Кроме того, стоит знать, что 'A' может быть' Object' (или 'Any') – goncalopp