2011-09-07 10 views
10

मेरे पास एक जावा जार है जिसे मैंने मूल डेवलपर की अनुमति के साथ संकुचित कर दिया है जिसे हम तब तक उपयोग कर सकते हैं जब तक कि वे हमें स्रोत कोड की प्रति प्राप्त नहीं कर लेते। मैं एक वर्ग है कि तरह लग रहा है के एक सदस्य में चलाने की है निम्नलिखित:

Classname.access$002(Param1, Param2); 

className सही है, लेकिन पहुँच $ 002 सही नहीं लगता है (वहाँ नाम उपयोग के साथ छोड़कर इस तरह कुछ और हैं $ 204 और अंत में संलग्न अन्य संख्याओं के साथ), और मुझे आश्चर्य है कि इसका मतलब जावा में कुछ भी है या यदि ऐसा इसलिए है क्योंकि डिकंपाइल ऑपरेशन अपूर्ण था।

मैं कक्षाओं को विघटित करने के लिए जेडी-जीयूआई का उपयोग कर रहा हूं।

यह भी उल्लेखनीय है कि $ 002 तक पहुंच के समान हस्ताक्षर के साथ कोई तरीका नहीं है, कम से कम कक्षा कक्षा में।

+0

ये लिंक मदद मिल सकती है: http://www.retrologic.com/innerclasses.doc7.html और http://stackoverflow.com/questions/6167326/java-class-name-containing-dollar-sign - पहला लिंक उल्लेख करता है कि वे आंतरिक पहुंच वर्गों के हिस्से के रूप में बनाए गए तरीकों से हो सकते हैं ताकि JVM कुछ वर्गों तक पहुंचने वाले वर्गों के समूह को समझने में सहायता कर सके। – birryree

+1

तकनीकी शब्द सिंथेटिक एक्सेसर है। – McDowell

उत्तर

17

access$XXX विधियां आंतरिक गैर स्थैतिक वर्गों से घोंसले वर्ग के सदस्यों को कॉल करती हैं।

public class DummyDummy { 

private int x = 0; 
private Inner i = new Inner(); 
private int foo(int a, int b) { 
    return a+b+x; 
} 

private class Inner { 
    void doIt() { 
     System.out.println(
     // Here, DummyDummy.access$0(DummyDummy, int, int) is called 
     // which calls DummyDummy.foo(int, int) 
      foo(1,2)    ); 
    } 
} 

public static void main(String[] args) { 
    new DummyDummy().i.doIt(); 
} 

} 
+0

यह एक जेनरेट [सिंथेटिक विधि] है (http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html#isSynthetic()) – Radim

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

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