दिया है, मैं Google प्रोटोबफ संदेशों से निपट रहा हूं।Method.invoke() के माध्यम से स्टेटिक विधि आमंत्रण ने मुझे एनपीई
चूंकि मेरी ज़रूरतें ऑब्जेक्ट के उदाहरण फ़ील्ड सेट करने के लिए हैं (उनमें से कुछ प्रोटोबफ संदेश हैं), मैंने एक ऐसा फ़ंक्शन लिखा है जो निर्माता को प्रतिबिंब के माध्यम से पुनर्प्राप्त करता है और protobuf-java-format संदेश को दोबारा शुरू करता है।
यहाँ कोड
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);
}
}
यह स्निपेट का इरादा के रूप में काम करता है, लेकिन मेरे संदेह के बाद जब मैं स्थिर तरीकों मैं हमेशा वास्तविक पैरामीटर के रूप में null
रख दिया है फोन Object builder = method.invoke(new Object());
कतार में है।
इस परिदृश्य में मेरे पास एक NullPointerException है।
किसी को कोई विचार है कि क्यों invoke() वास्तविक पैरामीटर में एक उदाहरण की आवश्यकता है?
धन्यवाद डारियो।
अगर एनपीई फेंकता है, तो विधि स्थैतिक नहीं है। आप यह जांचना चाहेंगे कि Modifier.isStatic (method.getModifiers()) – Javier
@ जेवियर: मैंने पहले ही विधि संशोधक की जांच की है। नियंत्रण ने मुझे दुर्भाग्य से सच बताया। – Dario
मेरे मुख्य संदेह प्रोटोबफ भाग में हैं। मुझे इन जीनरेटेड कक्षाओं में इतना अनुभव नहीं है ... – Dario