2013-12-11 7 views
5

में वर्ग क्षेत्र में सिंथेटिक सदस्यों का पता लगाएं एक कक्षा में सभी क्षेत्रों की पकड़ पाने के लिए:मैं स्केला में निम्न विधि का उपयोग कर रहा स्काला

val fields = contract.getClass.getDeclaredFields.toList.map(value => { 
    value.setAccessible(true) 
    value.getName 
}) 

contract मेरी कोड में एक वर्ग के रूप में परिभाषित किया गया है। चूंकि मैं प्रतिबिंब का उपयोग कर रहा हूं, समस्या यह है कि मुझे फ़ील्ड में से एक के रूप में एक और तत्व $jacocoData मिलता है। मैं इस क्षेत्र को अनदेखा करना चाहता हूं। ऐसा करने का 'हैकी' तरीका इस तथ्य को जानना है कि यह हमेशा सूची के अंत में जोड़ा जाता है, इसलिए मैं productArity को शामिल करने के लिए अपने फ़ंक्शन हस्ताक्षर को बदलकर इसे ठीक कर सकता हूं और केवल पहले arity तत्वों की संख्या ले सकता हूं इस:

def getFields(contract: Contract, arity: Int): List[String] = { 
    val fields = contract.getClass.getDeclaredFields.toList.map(value => { 
    value.setAccessible(true) 
    value.getName 
    }) 
//to ignore $jacocoData (Java code coverage) field 
val firstnFields = fields.take(arity) 
firstnFields 
} 

this FAQ के अंतिम बिंदु के अनुसार, मैं एक वर्ग के सिंथेटिक सदस्यों बंद छुटकारा पाने के लिए की जरूरत है। मैं उसको कैसे करू?

उत्तर

6

बस यह मानते हुए कि $jacocoData हमेशा अंतिम तत्व खतरनाक है, Class#getDeclaredFields()does not guarantee any order के रूप में।

एक क्षेत्र सिंथेटिक उपयोग Field#isSynthetic() है कि क्या जांच करने के लिए है, तो आपके कोड को बदला जा सकता है:

val fields = contract.getClass.getDeclaredFields. 
toList.withFilter(!_.isSynthetic()).map(value => { 
    value.setAccessible(true) 
    value.getName 
})            
संबंधित मुद्दे