मैं कोटलिन में आंशिक प्रतिनिधि तरीकों/फ़ील्ड कैसे कर सकता हूं?कोटलिन में आंशिक वर्ग प्रतिनिधिमंडल
विशिष्ट होना करने के लिए: यहाँ मैं इंटरफ़ेस TraitA
से वर्ग User
वारिस और आवरण StateA
में क्षेत्र marked: Boolean
लागू करने के लिए कोशिश कर रहा हूँ। इससे User
कार्यान्वयन को साफ कर दिया जाएगा, क्योंकि marked
केवल एक राज्य क्षेत्र है। ध्यान दें कि TraitA
एक वर्ग नहीं किया जा सकता क्योंकि मैं कई तरह के इंटरफेस का उपयोग करना चाहते: User() : TraitA by StateA, TraitB by StateB, ..
/* does not compile (Kotlin M12) */
interface TraitA {
var marked: Boolean
fun doStaffWithMarked() // must be overridable
}
class StateA() : TraitA {
override var marked = false
}
class User() : TraitA by StateA(){
override fum doStaffWithMarked() {
//...all fancy logic here...
}
}
विकल्प एक ही स्थान पर सभी को लागू करना है:
class User() : TraitA{
override var marked = false // ugly code
override fum doStaffWithMarked() {
//...
}
}
वहाँ एक रास्ता/पैटर्न है कि उस समस्या को आसानी से और जितना संभव हो उतना छोटा कोड हल करेगा? कोड/बाइटकोड पीढ़ी मेरे लिए एक विकल्प नहीं है।
अद्यतन
मुझे लगता है कि बारे में बहुत स्पष्ट नहीं था, लेकिन कृपया ध्यान दें कि doStaffWithMarked()
अद्वितीय हर User
के लिए है।
तो मैं एक 'आधा बुरा' रन-टाइम वक्तव्य दिये समाधान का सुझाव हो सकता है:
interface TraitA {
var marked: Boolean
/* must be overridden */
fun doStaffWithMarked() = throw UnsupportedOperationException()
}
class StateA() : TraitA {
override var marked = false
}
class User() : TraitA by StateA() {
override fum doStaffWithMarked() {
//...all fancy logic here...
}
}
सवाल है, अभी भी खुला है के बाद से एक बहुत अच्छी समाधान की जाँच करेगा कि doStaffWithMarked()
संकलन समय में।
isMarked() में TraitA लगता है अनावश्यक। आप बस इसके रूप में चिह्नित कर सकते हैं। –
'isMarked()' बहुत सारे फैंसी स्टाफ करता है और प्रत्येक अंतिम उपयोगकर्ता – voddan
के लिए अतिसंवेदनशील होना चाहिए, मुझे नहीं लगता कि यह जल्द से जल्द संभव होगा, क्योंकि स्टेटए वास्तव में एक पूर्ण श्रेणी नहीं है, आप इसे DoStaffWithMarked के कार्यान्वयन के बिना तत्काल नहीं कर सकते हैं (), इसलिए स्टेटए अपने आप पर बेकार है। और उपयोगकर्ता जैसे कुछ वर्ग हैं जो एक पूर्ण वर्ग और राज्य ए है जो अधूरा वर्ग है, बहुत अजीब है और मुझे लगता है कि – D3xter