2011-10-24 7 views
8

मुझे पता है कि इस सवाल को पहले से ही कई बार पूछा गया था, लेकिन मैं विशेष रूप से एक डिकंपेलर के बाद हूं जो enums को मजबूती से संभालता है (क्योंकि जार मैं encompiling उपयोग enums भारी)। मैंने परीक्षण किया कि जेएडी और जेडी-जीयूआई दोनों नहीं हैं।जावा डीकंपलर जो जावा 5 के साथ काम करता है (अन्य नई चीजों के बीच एनमल्स को संभालता है)

क्या कोई डीकंपलर की सिफारिश कर सकता है (आदर्श रूप से जो लिनक्स के तहत काम करता है और आसानी से पूरे जार को बिना स्क्रॉल लिखने की आवश्यकता के संभाल सकता है)?

संपादित करें:

switch(myEnum) { 
case A: ... 
case B: ... 
} 

वे की तरह कुछ के रूप में decompiled हो (दोनों JAD और जद-जीयूआई के लिए):

switch ($SWITCH_TABLE$com$MyType()[myEnum.ordinal()]) { 
case 1: 
case 2: 
} 

जहां $SWITCH_TABLE$com$MyType() है या तो नहीं विशेष रूप से मैं मुद्दों की तरह निर्माणों के साथ है बिल्कुल घोषित या संकलित नहीं करता है।

+0

संभावित डुप्लिकेट [मुझे जावा डिकंपेलर कहां मिल सकता है?] (Http://stackoverflow.com/questions/671394/where-can-i-find-a-java-decompiler) –

+1

प्रश्न के अनुसार मैंने लिंक किया ऊपर http://java.decompiler.free.fr/ जावा 5 के लिए सबसे अच्छा प्रदान करता है। यदि यह आपके लिए काम नहीं करता है, तो हमें बताएं * कैसे * यह मदद नहीं करता है। –

+0

मुझे जेडी-जीयूआई के बारे में पता नहीं है लेकिन हम जेडी-एक्लिप्स का उपयोग कर रहे हैं जो जेडी-कोर के पुराने संस्करण का उपयोग करता है जो जेडी-जीयूआई करता है, और यह भी enums को संभालता है। – Thomas

उत्तर

2

एनम-स्विच को ठीक से अपनाना संभव नहीं है। जावा-क्लासफ़ाइल को संकलन के बाद enum-Typ के बारे में पता नहीं है, इस प्रकार आपका डिकंपाइलर इसे पसंद नहीं कर सकता है।

एनम्स-प्रकार java.lang.Enum के सभी उपप्रकार हैं, प्रत्येक enum निरंतर एक क्रमिक संख्या प्राप्त होती है जिसका उपयोग स्विच स्टेटमेंट में किया जाता है। कंपाइलर उस इंट-वैल्यू पर एक स्विच करता है, एनम प्रकार पर एक स्विच सिंटैक्टिक-चीनी कहा जाता है। यदि आप null पर स्विच करने का प्रयास करते हैं- तो आपको एक एनपीई मिलेगा।

+0

निर्भर करता है कि डिकंपेलर मुझे कितना स्मार्ट लगता है। यदि यह enum की घोषणा को खोजने में सक्षम है, तो यह क्रमिक संख्याओं को वापस नामों में मैप करने में सक्षम होना चाहिए। – Grzenio

+0

यदि मैं $ 1 संस्करण को एक वर्ग फ़ाइल को डीकंपाइल करता हूं जो एक ईएनएन पर स्विच करता है, तो मुझे ENUM स्थिरांक के साथ सभी ordinals की एक सूची मिलती है। इसे कम करना संभव होगा - इसे केवल कोडिंग की आवश्यकता है। दुर्भाग्यवश ऐसा प्रतीत नहीं होता है कि जेडी-जावा डिकंपेलर ओपन सोर्स है :-(और जेएडी बहुत पुराना प्रयास किए बिना सब कुछ पर गति प्राप्त करने के लिए बहुत पुराना है। – mjaggard

2

मुझे पता चला है कि एक शोध परियोजना का उत्पाद, CFR, विशेष रूप से अच्छी तरह से Enams संभालती है।

इस समय जेडी-जीयूआई और जेएडी ओपी के प्रश्न पोस्ट किए जाने से बेहतर प्रदर्शन नहीं करते हैं, जबकि सीएफआर संस्करण 0.43 सही, संकलित स्रोत उत्पन्न करता है, भले ही ओबफस्केटेड कक्षाओं को खिलाया जाता है।

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