Обычно вы создаете экземпляр класса Protobuf вроде этого:Как создать экземпляры protobuf с использованием java-отражения?
Bar.Builder bld = Bar.newBuilder();
bld.setXYZ(...
У меня есть UseCase, который использует отражение Java для создания экземпляра класса Protobuf:
Class clsBar = Class.forName("com.xyz.Foo$Bar");
Object instance = clsBar.newInstance(); // error here!
Method mth = clsBar.getMethod(...);
Приведенный выше код отлично работает с обычными классами Java , Но для сгенерированного класса protobuf "com.xyz.Foo$Bar"
, он дает мне NoSuchMethodException
, так как там нет общедоступного конструктора по умолчанию.
Любые предложения о том, как использовать Java-рефлексию для создания экземпляров protobuf? Вопрос в том, кто действительно хорошо разбирается в протобуфе. Спасибо!
Что делать, если вы вызвали clsBar.getConstructors() и вызвали метод .newInstance() на одном из возвращаемых объектов Constructor? – Duston
Какая информация у вас есть? Только желаемый класс или больше? Если вы хотите создать экземпляр Protobuf из массива байтов или аналогичного, вы можете использовать метод 'parseFrom'. – dpr
@Duston Все конструкторы являются частными, поскольку реализация protobuf идет. Для dpr у меня есть только полные квалифицированные имена классов, которые генерируют классы protobuf. –