एक एंटिटी क्षेत्र के रूप में कोटलिन इनलाइन क्लास के साथ कक्ष डेटाबेस


11

मैं कोटलिन की इनलाइन कक्षाओं के साथ कमरा ( https://developer.android.com/topic/lbooks/altecture/room ) काम पाने की कोशिश कर रहा हूं जैसा कि जेक व्हार्टन के लेख इनलाइन क्लासेस मेक ग्रेट डेटाबेस आईडी में वर्णित है :

@Entity
data class MyEntity(
    @PrimaryKey val id: ID,
    val title: String
)

inline class ID(val value: String)

संकलन करते समय इस कक्ष की शिकायत है

संस्थाओं और Pojos एक उपयोगी सार्वजनिक निर्माण होना चाहिए। आपके पास एक खाली कंस्ट्रक्टर या एक कंस्ट्रक्टर हो सकता है, जिसके पैरामीटर फ़ील्ड (नाम और प्रकार से) से मेल खाते हैं।

उत्पन्न जावा कोड को देखकर मुझे लगता है:

private MyEntity(String id, String title) {
      this.id = id;
      this.title = title;
}

// $FF: synthetic method
public MyEntity(String id, String title, DefaultConstructorMarker $constructor_marker) {
      this(id, title);
}

रहस्यमय तरीके से डिफ़ॉल्ट निर्माता अब निजी है।

जब (या a ) के Stringलिए एक प्रकार के रूप में उपयोग किया जाता है , तो उत्पन्न जावा वर्ग निर्माता अपेक्षित दिखता है:idtypealias

public MyEntity(@NotNull String id, @NotNull String title) {
  Intrinsics.checkParameterIsNotNull(id, "id");
  Intrinsics.checkParameterIsNotNull(title, "title");
  super();
  this.id = id;
  this.title = title;
}

क्या अब कोई व्यक्ति इनलाइन क्लासेस को डेटा एंटिटी प्रॉपर्टी के रूप में इस्तेमाल करते हुए डिफॉल्ट कंस्ट्रक्टर को कैसे सार्वजनिक रख सकता है?


1
क्या आपने इसके लिए कुछ मुद्दे ट्रैकर पर एक मुद्दा उठाया था? मुझे लगता है कि यह निश्चित रूप से स्पष्ट करने की आवश्यकता है
K.s

जवाबों:


0

मेरा मानना ​​है कि इसका कारण यह है कि आईडी क्लास को रनटाइम में स्ट्रिंग के रूप में दर्शाया जाएगा। तो $ constructor_marker अतिरिक्त पैरामीटर MyEntity (स्ट्रिंग आईडी, स्ट्रिंग शीर्षक) निर्माता हस्ताक्षर की विशिष्टता की गारंटी देने के लिए है, क्योंकि यह निर्माता पहले से ही परिभाषित हो सकता है। लेकिन मैं यहां सिर्फ अटकलें लगा रहा हूं।

क्या आप MyEntity वर्ग में इस निर्माता को स्पष्ट रूप से परिभाषित करने का प्रयास कर सकते हैं और देख सकते हैं कि क्या यह काम करता है?


यह कंस्ट्रक्टर पहले से ही स्पष्ट (लेकिन सिंटैक्टिक शुगर के साथ) में परिभाषित किया गया हैdata class MyEntity(@PrimaryKey val id: ID, val title: String)
एचडीएल

1
आपने (ID, स्ट्रिंग) मापदंडों के साथ एक कंस्ट्रक्टर को परिभाषित किया, मेरा मतलब था (स्ट्रिंग, स्ट्रिंग) के साथ एक कंस्ट्रक्टर। मैंने कोशिश की, लेकिन ऐसा लगता है कि यह संभव नहीं है। मुझे "प्लेटफ़ॉर्म घोषणा घोषणा" त्रुटि मिली।
डिएगो मारिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.