2015-05-17 12 views
6

मैं को जावास्क्रिप्ट का उपयोग कर कक्षा फ़ाइल से एक विधि को हटाने का प्रयास कर रहा हूं।जावस्सिस्ट का उपयोग करके एक विधि को कैसे हटाया जाए?

लक्ष्य वर्ग: "RemoveMethod"

लक्ष्य विधि: "DoubleCheck"

मेरे कोड:

package javassist;  
     import java.io.IOException; 
     import java.lang.reflect.Method; 
     import javassist.*; 

public class cRepair { 
    public static void main(String[] args) throws NotFoundException, IOException, CannotCompileException{ 
    ClassPool pool = ClassPool.getDefault(); 
    CtClass ctClass = pool.get("javassist.RemoveMethod"); 
    CtMethod ctm = ctClass.getDeclaredMethod("DoubleCheck"); 
    ctClass.removeMethod(ctm); 
    ctClass.writeFile("C:/Users/workspace/Javaproject1/src/javassis"); 
} 
} 

फिर, फ़ाइल "javassist.jar" का उपयोग कर कोड चलाएँ:

javap -verbose RemoveMethod.class 

विधि:

javac -cp javassist.jar cRepair.java 

तब लक्ष्य वर्ग की जाँच "डबल चेक" अभी भी है!

यह वास्तव में अजीब लग रहा है। ऐसा क्यों हो सकता है और इसे कैसे ठीक किया जाए?

+0

जावैक कॉल सिर्फ आपके कोड को संकलित करता है, यह इसे नहीं चलाता है। – muued

+0

@muued, धन्यवाद आदमी। यह समझ में आता है! मैंने कोड "जावा सीआरपेयर" का उपयोग करके कोड चलाने की कोशिश की, लेकिन सिस्टम कहता है "मुख्य श्रेणी सीआरपीएयर नहीं मिला या लोड नहीं किया जा सका" – Delibz

+0

रन 'जावा-सीपी जावसिस्ट.जर javassist.cRepair' – muued

उत्तर

3

आपका कोड आपकी कक्षा के बाइटकोड को स्मृति में पढ़ता है और विधि को हटा देता है। लेकिन यह संशोधित बाइटकोड को .class फ़ाइल पर वापस नहीं लिखता है। ऐसा करने के लिए आप CtClass#writeFile() पर कॉल कर सकते हैं।

+0

आपकी प्रशंसा के लिए बहुत बहुत धन्यवाद। मैंने अभी अपना कोड संशोधित किया है (जैसा कि दिखाया गया है) और इसे फिर से प्रयास किया गया, लेकिन नई कक्षा "संशोधित विधि" उत्पन्न नहीं हुई थी ...... – Delibz

+0

'writeFile()' में पैरामीटर * निर्देशिका * को परिभाषित करता है जहां आपकी कक्षा लिखी जाएगी । तो अपना कोड चलाने के बाद आपके पास 'ModifiedMethod' नामक एक निर्देशिका होनी चाहिए जिसमें संशोधित 'RemoveMethod' क्लास शामिल है। मैंने आपका उदाहरण कोड चलाया और यह काम किया। सीटी क्लास के जावाडोक: http://www.csg.ci.iu-tokyo.ac.jp/~chiba/javassist/html/javassist/CtClass.html#writeFile-- –

+0

आपको बाहर निकालने के लिए खेद है लेकिन मैं अभी भी उलझन में हूं। ..मैंने निर्देशिका स्थापित की और अपना कोड पुनः प्रयास किया .... कोड चलाने के बाद मेरी मेज पर अपेक्षित वर्ग फ़ाइल जेनरेट की गई थी .... एक बार फिर आपके धैर्य के लिए धन्यवाद ... – Delibz

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