java - कोटलिन-एक नल योग्य मैदान के लिए गैर-गलती प्राप्तकर्ता



nullpointerexception kotlin (1)

मैं व्यक्तिगत रूप से एक निजी प्रकार का प्रयोग करता हूं जिसे समान परिस्थितियों में सार्वजनिक वैल में _ +

class Example<out T> {
  private var _id: T? = null
  val id: T
    get() = _id!!
}

आपकी स्थिति के लिए, यह ऐसा दिखेगा:

@org.mongodb.morphia.annotations.Id
private var _id: ObjectId? = null
val id: ObjectId
  get() = _id!!

वैकल्पिक रूप से, अपने वैरिएबल को lateinit तरह इस तरह घोषित करें:

@org.mongodb.morphia.annotations.Id
lateinit var id: ObjectId

मैं Kotlin के साथ नया हूँ और मैं इस नई भाषा के लिए एक छोटा जावा परियोजना फिर से काम करने की कोशिश करता हूं। मैं अपनी परियोजना में मोंगोडब का उपयोग करता हूं और मेरे पास एक वर्ग है, उदाहरण के लिए:

class PlayerEntity {

  constructor() {} //for mongodb to create an instance

  constructor(id: ObjectId, name: String) { //used in code
    this.id = id
    this.name = name
  }

  @org.mongodb.morphia.annotations.Id
  var id: ObjectId? = null

  var name: String? = null
}

रिक्त कन्स्ट्रक्टर के कारण मुझे id फ़ील्ड को रिक्त स्थान के रूप में चिह्नित करना होगा ( var id: ObjectId? ) जब मैं इस क्षेत्र को दूसरे वर्ग से एक्सेस करने की कोशिश करता हूं तो मुझे बिना किसी निरर्थक जांच का उपयोग करना होगा: thePlayer.id!! । लेकिन मेरे आवेदन का तर्क यह है कि id फ़ील्ड कभी भी अशक्त नहीं है (मोंगो प्लेयर का एक उदाहरण बनाता है और तुरंत आईडी फ़ील्ड सेट करता है) और मैं हर जगह एक गैर रिक्त जांच नहीं करना चाहता।

मैंने एक गैर-रिक्त प्राप्तकर्ता बनाने की कोशिश की, लेकिन यह संकलन नहीं करता है:

var id: ObjectId? = null
    get(): ObjectId = id!!

मैं आईडी के लिए कुछ स्टब भी बना सकता हूं और इसे कन्स्ट्रक्टर में उपयोग कर सकता हूं, लेकिन यह एक गंदी हैक जैसा दिखता है:

val DUMMY_ID = new ObjectId("000000000000000000000000");

तो क्या इस मुद्दे को सुलझाने का एक उपाय है?





non-nullable