2012-07-02 16 views
5

निम्नलिखित कोड एक "अनियंत्रित/अपुष्ट डाली" महत्वपूर्ण उल्लंघन सोनार + FindBugs का उपयोग कर को जन्म देती है:अनियंत्रित/अपुष्ट डाली कई गुना

1 public static <P extends ComponentContainer & AlignmentHandler> void addComponentAligned(P parent, Component child, Alignment alignment) { 
2  parent.addComponent(child); 
3  parent.setComponentAlignment(child, alignment); 
4 } 

का कोई भी विचार मैं इस उल्लंघन कैसे बचना चाहिए?

संपादित करें: उल्लंघन लाइन 3

पर है संपादित करें: विधि हस्ताक्षर का पालन करें: ComponentContainer # addComponent (घटक) AlignmentHandler # setComponentAlignment (घटक, संरेखण)

+0

रुको, क्या आप वास्तव में जावा में एकाधिक विरासत का उपयोग करने का एक तरीका है जिसके द्वारा आप प्रयास कर रहे हैं? – BlackVegetable

+1

अधूरा। कौन सा कथन विशेष रूप से त्रुटि का कारण बनता है? 'AddComponent()' और 'setComponentAligment()' की परिभाषाएं भी दिखाएं। हम दिमाग-पाठक नहीं हैं। –

+0

@ ब्लैकवेजटेबल: एकाधिक इंटरफ़ेस विरासत, हां। –

उत्तर

5

वहाँ अपने स्रोत कोड में कोई डाली है, लेकिन संकलन के परिणामस्वरूप बाइटकोड में है। बाइटकोड में, सामान्य प्रकार मिटा दिए जाते हैं। P के लिए मिट इसकी पहली बाध्य है, ComponentContainer। तो बाईटकोड (लगभग) इस बात का बाईटकोड के बराबर है:

public static void addComponentAligned(ComponentContainer parent, Component child, Alignment alignment) { 
    parent.addComponent(child); 
    ((AlignmentHandler)parent).setComponentAlignment(child, alignment); 
} 

FindBugs कि बाईटकोड को देखता है, और निष्कर्ष निकाला है कि AlignmentHandler है कि कलाकारों के असफल हो सकता है, क्योंकि (जहां तक ​​FindBugs रूप में देखता है) विधि किसी भी ComponentContainer स्वीकार करता है ।

यह एक खोजबग बग है; आपको एक बग रिपोर्ट खोलनी चाहिए। यह मुझे कुछ ऐसा लगता है जिसे स्रोत कोड का विश्लेषण किए बिना तय किया जा सकता है। बाइटकोड में असली (जेनेरिक) प्रकार भी होते हैं, और findbugs का उपयोग करना चाहिए।

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