android - कोटलिन एनोटेशन प्रोसेसिंग, समान नाम वाले आइटमों को अनदेखा करते हैं




annotations kotlin (2)

तो कुछ हद तक kotlin.UninitializedPropertyAccessException: lateinit जवाब देने के लिए। kotlin.UninitializedPropertyAccessException: lateinit मुद्दा, मैं अपने प्रोजेक्ट में सटीक एक ही चीज़ में चल रहा था। मैंने क्या किया जो "समस्या का हल" मेरे लिए अपमानजनक वर्ग से बटरनेफ़ेफ को हटा देना था, इस मामले में यह मेरे नए विस्तार योग्य रीसाइक्लेअर दृश्य के लिए सिर्फ एक दृश्य है, और फिर फिर से एप्लिकेशन को चलाता है

@Bind(R.id.my_view_id) के रूप में "पुराने स्कूल" findViewById(R.id.my_view_id) as MyViewType अपने सभी @Bind(R.id.my_view_id) को स्विच करने के बाद एप्लिकेशन findViewById(R.id.my_view_id) as MyViewType बाद, लेकिन बाद में बाद में मैंने एक ही कक्षा को वापस Butterknife और findViewById(R.id.my_view_id) as MyViewType स्विच किया चले गए, और ऐसा लगता है कि जब तक क्लास में कोई बदलाव नहीं आएगा तब तक वह वापस नहीं आएगा, फिर आपको इस प्रक्रिया को दोबारा दोहरा देना होगा

मेरा संदेह यह है कि इसको कोप्टलन के साथ बढ़ते हुए संकलन का समर्थन करने के लिए कुछ नहीं है, और किसी भी तरह ऑटो-जनरेटेड कोड बदलकर इसे पुनः कंपाइल करने के लिए मजबूर किया गया था लेकिन मैं यहां से दूर हो सकता हूं, बस सोचा कि मैं अपना अनुभव साझा करूँगा।

मैंने हाल ही में अपनी परियोजना के अधिकांश कोटलिन को परिवर्तित कर दिया। अब मुझे कई असामान्य त्रुटियां मिलती हैं जो सभी एनोटेशन पुस्तकालयों से संबंधित हैं। कहने की जरूरत नहीं है, यह जावा में नहीं हुआ था।

मैं मामलों का वर्णन करता हूँ - एक डैगर में और एक बटरनेफ़ेफ़ में

1. जब 2 @Provides एक ही नाम के साथ विभिन्न मॉडलों में तरीकों प्रदान करता है उदाहरण के लिए, "FooProvider.kt" फ़ाइल में "provideFooOrBar" विधि है

@Module
class FooProvider(private val view: FooActivity) {
    ... 
    @Provides @FooScope fun provideView() = view
    @Provides @FooScope fun provideFooOrBar() = Foo()
}

और एक ही विधि नाम के साथ "BarProvider.kt" एक और फ़ाइल है

@Module
class BarProvider(private val view: BarActivity) {
    ...
    @Provides @BarScope fun provideView() = view
    @Provides @BarScope fun provideFooOrBar() = Bar()
}

इस मामले में, डैगर कुछ कारखाना पुस्तकालयों को उत्पन्न करने में विफल रहता है और मुझे निम्न संकलन त्रुटि मिलती है: Error:(27, 32) error: cannot find symbol class FooProvider_ProvideFooOrBarFactory

इस समस्या को पुन: प्रस्तुत करने वाला एक नमूना प्रोजेक्ट https://github.com/maxandron/DaggerIssue325 पर पाया जा सकता है

2. यह एक मुद्दा है जब बटरनॉइन का उपयोग करना जब दो दो अलग-अलग वर्गों में एनोटेट किए गए वेरिएबल्स को छोड़ दें - इनमें से कोई भी रनटाइम पर किसी भी संकलन त्रुटि के बिना आरंभ करने में विफल रहता है!

उदाहरण के लिए यदि मेरे पास है:

class FooActivity {
    @Bind(R.id.foo) lateinit var mFoo: View
}
class NotFooActivity {
    @Bind(R.id.not_foo) lateinit var mFoo: View
}

फिर उनमें से एक (या दोनों?) कोई भी त्रुटि के बिना आरंभ करने में विफल हो जाएगा kotlin.UninitializedPropertyAccessException: lateinit property mFoo has not been initialized फ़ील्ड तक पहुंचने पर फेंकने के लिए अपवाद kotlin.UninitializedPropertyAccessException: lateinit property mFoo has not been initialized है।

क्या ऐसा कुछ है जो मैं कोटलिन को कॉन्फ़िगर करने में गलत कर रहा हूं या क्या यह एक कोटलिन बग है?

आपका अग्रिम में ही बहुत धन्यवाद! रॉन


मुझे यह समस्या हो रही थी, इसलिए मैंने जांच शुरू कर दी और इसका कारण यह है क्योंकि कैप्ट केवल उनकी तुलना करते समय विधि नाम की जांच कर रहे हैं , और वे एक सेट में जोड़े जाते हैं , इस प्रकार डुप्लिकेट की अनुमति नहीं है वही एनोटेट किए गए फ़ील्ड के लिए होता है, इसलिए वर्तमान में आपके पास प्रति एनोटेशन के लिए एक विधि / फील्ड नाम हो सकते हैं।

मैंने कक्षा के नाम को equals तरीके से जोड़ दिया और एनोटेशन ठीक से संभाला था, लेकिन परीक्षण तोड़ दिया और मैं नहीं जानता कि वे कैसे काम करते हैं, इसलिए मुझे उम्मीद है कि किसी को यह तय करना होगा कि यह कैसे ठीक करें।