2012-11-11 34 views
23

घोषित करने का एक उदाहरण नहीं है इस सवाल को Google पर हर जगह पूछा जा रहा है लेकिन मुझे अभी भी इसमें समस्या है। यह वही है जो मैं करने की कोशिश कर रहा हूं। तो मेरे शीर्षक राज्यों की तरह, मुझे 'ऑब्जेक्ट क्लास घोषित करने का एक उदाहरण नहीं है' त्रुटि मिल रही है। कोई विचार? धन्यवाद!जावा प्रतिबिंब - ऑब्जेक्ट कक्षा

Main.java

Class<?> base = Class.forName("server.functions.TestFunction"); 
Method serverMethod = base.getMethod("execute", HashMap.class); 
serverMethod.invoke(base, new HashMap<String, String>()); 

TestFunction.java

package server.functions; 

import java.util.HashMap; 
import java.util.Map; 

import server.*; 

public class TestFunction extends ServerBase { 

    public String execute(HashMap<String, String> params) 
    { 
     return "Test function successfully called"; 
    } 
} 

उत्तर

37

आप कक्षा के साथ विधि का आह्वान कर रहे हैं, लेकिन आपको इसका एक उदाहरण चाहिए। इस प्रयास करें:

serverMethod.invoke(base.newInstance(), new HashMap<String, String>()); 
+0

पूरी तरह से काम किया। धन्यवाद – tier1

+0

बस मुझे जो चाहिए, धन्यवाद! –

10

आप वस्तु base, जो वास्तव में एक Class वस्तु अपने Class.forName() कॉल द्वारा दिया है पर execute विधि को लागू करने की कोशिश कर रहे हैं।

यह केवल static (कक्षा) विधि के लिए काम करेगा, लेकिन execute एक गैर स्थैतिक (उदाहरण) विधि है।

आपको विधि को आमंत्रित करने के लिए TestFunction का वास्तविक उदाहरण चाहिए, या आपको विधि static बनाने की आवश्यकता है।

अपने वर्तमान उदाहरण विधि किसी भी TestFunction वस्तु के लिए एक ही बात करना होगा, सामान्य एक उदाहरण विधि में प्रत्येक वस्तु के लिए एक अलग परिणाम उत्पादन कर सकता है हालांकि - तो .invoke() प्रतिबिंब विधि को पता है, जिस पर विधि को चलाने के लिए वस्तु की जरूरत है।

+0

स्थिर तरीकों आप भी प्रदान कर सकते हैं के लिए 'null' ... –

+0

हाँ वास्तव में, में [JavaDoc] वर्णित के रूप में (http://docs.oracle.com/javase/6/docs/ एपीआई/जावा/लैंग/प्रतिबिंबित/Method.html # आह्वान% 28java.lang.Object,% 20java.lang.Object ...% 29)। – DNA

+0

विस्तृत स्पष्टीकरण के लिए धन्यवाद। काश मैं इस प्रश्न के लिए कई सही उत्तरों का चयन कर सकता हूं। – tier1

संबंधित मुद्दे