Вы не можете получить литерал класса, но вы можете проверить, соответствует ли объект этому типу двумя различными способами:
trait X
trait Y
val xy: AnyRef = new X with Y
val zz: AnyRef = new Object with X
xy.isInstanceOf[X with Y] // true
zz.isInstanceOf[X with Y] // false
xy match { case a: X with Y => true; case _ => false} // true
zz match { case a: X with Y => false; case _ => false} // false
Это очень похоже на это общее объявление в Java
public <T extends Comparable<T> & Serializable> T id(T t) { return t; }
Этот метод стирается до
public Comparable id(Comparable t) { return t; }
Однако в Java вы не можете сказать xy instanceof (X&Y)
, но на самом деле это то же самое, что xy instanceof X && xy instanceof Y