Я работаю в проекте, в котором мне нужно пометить тип полученных сообщений.Сообщения могут поступать из разных источников, но все эти источники генерируют сообщения с одинаковым концептуальным типом (а значит, с одинаковым значением), но написанные по-разному.
Например, из source1 Я могу получить
Source1:
{
"message_type": "typeA",
"value": 3
...
}
или
{
"message_type": "typeB",
"value": 3
...
}
Но также от source2 Я могу получить
Source2:
{
"message_type": "A",
"value": 5
...
}
или
{
"message_type": "B",
"value": 2
...
}
Я хочу максимизировать повторное использование кода, поэтому я попробовал это решение.
Первый созданный мною файл scala является признаком:
trait MessageType extends Enumeration {
val TYPE_A: Value
val TYPE_B: Value
}
, затем я реализовал его в двух объектных файлах:
object Source1MessageType extends MessageType{
override val TYPE_A: Value("typeA")
override val TYPE_B: Value("typeB")
object Source2MessageType extends MessageType{
override val TYPE_A: Value("A")
override val TYPE_B: Value("B")
Итак, теперь я хочупроверьте тип сообщения, не зная тип источника, например:
def foo(type: MessageType.Value) {
type match{
case MessageType.TYPE_A => ...do A action...
case MessageType.TYPE_B => ...do B action...
}
}
Но если я напишу этот код, IDE (IntelliJ) выделит параметр красным, но не даст информации об ошибке,Кажется, что я могу использовать только Source1MessageType или Source2MessageType в качестве типа параметра.
Я думаю, что ошибка в том, что Scala не видит эту черту как перечисление, поэтому яне может получить доступ к значениям перечисления.
У вас есть какое-то решение для этого?