Я пишу программу, которая работает с двумя прото-сообщениями, мне нужно обработать byte [], отправленный из разных источников, который отправляет либо сообщение foo, либо сообщение bar. Поскольку я не могу понять, какому сообщению он принадлежит, я использовал Any Class (поставляется вместе с protobuf), чтобы проанализировать массив байтов и найти, к какому классу он принадлежит, но обнаружил ошибку времени компиляции. Есть ли какой-нибудь другой метод, который я могу использовать, чтобы определить, добавляю ли я больше классов протокольных сообщений в будущем?
//Foo.proto
syntax = "proto3";
option java_outer_classname = "FooProto";
message Foo {
int32 a = 1;
}
и второй прото
//Bar.proto
syntax = "proto3";
option java_outer_classname = "BarProto";
message Bar {
int32 b = 1;
}
Код:
Any anyEvent = Any.parseFrom(protoBytes);
if (any.is(Foo.class)
{
Foo foo = any.unpack(Foo.class);
...
} else {
Bar bar = any.unpack(Bar.class);
...
}
Ошибка в операторе if при попытке вызвать any.is ():
Метод (Class ‹T>) в типе Any неприменим для аргументов (Class‹ Foo>)