Я использую оператор Scala match/case
, чтобы соответствовать интерфейсу данного Java-класса. Я хочу иметь возможность проверить, реализует ли класс комбинацию интерфейсов. Единственный способ заставить это работать - использовать вложенные операторы match/case
, которые кажутся уродливыми.
Допустим, у меня есть объект PersonImpl, который реализует Person, Manager и Investor. Я хочу видеть, реализует ли PersonImpl и Менеджера и Инвестора. Я должен быть в состоянии сделать следующее:
person match {
case person: (Manager, Investor) =>
// do something, the person is both a manager and an investor
case person: Manager =>
// do something, the person is only a manager
case person: Investor =>
// do something, the person is only an investor
case _ =>
// person is neither, error out.
}
case person: (Manager, Investor)
просто не работает. Чтобы заставить это работать, я должен сделать следующее, которое кажется уродливым.
person match {
case person: Manager = {
person match {
case person: Investor =>
// do something, the person is both a manager and investor
case _ =>
// do something, the person is only a manager
}
case person: Investor =>
// do something, the person is only an investor.
case _ =>
// person is neither, error out.
}
Это просто безобразно. Есть предложения?