ho a che fare con i messaggi di Google protobuf.Metodo statico invocazione via Method.invoke() mi ha dato NPE
Dato che i miei bisogni sono per impostare i campi di un oggetto (alcuni di loro sono messaggi Protobuff) esempio, ho scritto una funzione che recupera attraverso la riflessione e il costruttore attraverso il protobuf-java-format ricrea il messaggio.
Ecco il codice
for (String aFieldName : objectContentMap.keySet()) {
Object aFieldNameValue = objectContentMap.get(aFieldName);
if (aFieldNameValue != null) {
Field theClassField = this.instance.getField(aFieldName);
ReflectionUtils.makeAccessible(theClassField);
Class<?> classType = theClassField.getType();
if (!classType.isPrimitive() &&
GeneratedMessage.class.isAssignableFrom(classType.getSuperclass())) {
Method method = classType.getMethod("newBuilder");
// Since the method is static, the instance object that undergoes the call is not important, but with "null" I have a NPE...
Object builder = method.invoke(new Object());
if (builder instanceof Builder) {
Builder newBuilder = (Builder)builder;
InputStream asd = new ByteArrayInputStream(((String)aFieldNameValue).getBytes());
protoMapper.merge(asd, newBuilder);
aFieldNameValue = newBuilder.build();
}
}
theClassField.set(recreatedObject, aFieldNameValue);
}
}
Questo frammento di codice funziona come previsto, ma il mio dubbio è nella linea Object builder = method.invoke(new Object());
da quando io chiamo i metodi statici che ho sempre messo null
come parametro attuale.
In questo scenario ho un NullPointerException.
avere qualcuno qualche idea del perché non v'è la necessità di un esempio nel invoke() parametro effettivo?
Grazie Dario.
Se invoke getta NPE, allora il metodo non è statico. Si consiglia di verificare se Modifier.isStatic (method.getModifiers()) – Javier
@Javier: Ho già verificare il metodo di modifica. Il controllo mi ha dato purtroppo vero. – Dario
i miei dubbi principali sono nella parte protobuf. Non ho tanta esperienza in queste classi genereted ... – Dario