/ / मैथ.इनवोक () के माध्यम से स्टेटिक विधि मंगलाचरण ने मुझे NPE - जावा, प्रतिबिंब, प्रोटोकॉल-बफर दिया

Method.invoke () के माध्यम से स्टेटिक विधि मंगलाचरण ने मुझे NPE - जावा, प्रतिबिंब, प्रोटोकॉल-बफ़र दिया

मैं Google Protobuf संदेशों के साथ काम कर रहा हूँ।

चूँकि मेरी ज़रूरत किसी ऑब्जेक्ट के इंस्टेंस फील्ड को सेट करना है (उनमें से कुछ प्रोटॉबफ मैसेज हैं), मैंने "एक फंक्शन लिखा है जो बिल्डर को रिफ्लेक्ट करके बिल्डर के माध्यम से प्राप्त होता है।" Protobuf-जावा प्रारूप संदेश पुनः बनाता है।

यहाँ कोड है

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);
}
}

यह स्निपेट इरादा के अनुसार काम करता है, लेकिन मेरा संदेह अंदर है Object builder = method.invoke(new Object()); जब से मैं स्थिर तरीकों को कॉल करता हूं, तब से मैं हमेशा डालता हूं null वास्तविक पैरामीटर के रूप में।

इस परिदृश्य में मैं एक NullPointerException है।

किसी को कोई विचार है कि इनवोक () वास्तविक पैरामीटर में एक उदाहरण की आवश्यकता क्यों है?

धन्यवाद डारियो।

उत्तर:

जवाब के लिए 0 № 1

विधि के लिए javadoc का कहना है Method.invoke विधि हस्ताक्षर है:
"आह्वान (वस्तु obj, वस्तु ... args)"
यह भी कहता है:
"यदि अंतर्निहित विधि स्थिर है, तो निर्दिष्ट obj तर्क को अनदेखा किया जाता है। यह अशक्त हो सकता है।"

इसका अर्थ है कि आपकी अंतर्निहित विधि स्थिर नहीं है। हालाँकि आप देख रहे हैं कि क्या यह स्थिर है यह सही नहीं है।