這個 Model 類的 getter 和 setter 實作方式與 Java 相同,但現在用 Kotlin 撰寫
class HousePost{
private var uid: String = ""
private var postImage: String = ""
private var rent: String = ""
private var description: String = ""
private var publisher: String = ""
private var location: String = ""
private var postId: String? = ""
private var rooms: String = ""
private var caption: String = ""
private var dateTime: String = ""
var expandable: Boolean = false
constructor()
constructor(
uid: String,
postImage: String,
rent: String,
description: String,
location: String,
postId: String,
publisher: String,
rooms: String,
caption: String,
dateTime : String
) {
this.uid = uid
this.postImage = postImage
this.rent = rent
this.description = description
this.location = location
this.postId = postId
this.publisher = publisher
this.rooms = rooms
this.caption = caption
this.dateTime = dateTime
this.expandable = false
}
//Post Details getters
fun getUid() : String {
return uid
}
fun getPostId (): String? {
return postId
}
fun getPostImage():String {
return postImage
}
fun getDescription():String {
return description
}
fun getLocation():String {
return location
}
fun getRent():String {
return rent
}
fun getPublisher(): String {
return publisher
}
fun getRooms(): String {
return rooms
}
fun getCaption() : String {
return caption
}
fun getDateTime() : String {
return dateTime
}
//Post Details setters
fun setUid (uid: String) {
this.uid = uid
}
fun setPostId(postId: String) {
this.postId = postId
}
fun setPostImage(postImage: String) {
this.postImage = postImage
}
fun setLocation(location: String) {
this.location = location
}
fun setDescription(description: String) {
this.description = description
}
fun setRent(rent: String) {
this.rent = rent
}
fun setPublisher(publisher: String) {
this.publisher = publisher
}
fun setCaption(caption: String) {
this.caption = caption
}
fun setDateTime(dateTime: String) {
this.dateTime = dateTime
}
}
這個類應該對我的資料庫中的資料進行建模。這是 Kotlin 中的正確方法嗎?我得到了一個No setter/field for class found錯誤。我的 recyclerview 根本沒有顯示資料,我認為是由于錯誤造成的。
uj5u.com熱心網友回復:
在 Kotlin 中,屬性不需要顯式的 getter 或 setter 方法。
Kotlin 類中的屬性可以使用關鍵字宣告為可變的,也可以使用var關鍵字宣告為只讀的val。
主要目的是在 Kotlin 中保存資料的類稱為資料類,并用data. 例如,在您的情況下,該類可以定義如下:
data class HousePost(
val uid: String = ""
val postImage: String = ""
val rent: String = ""
val description: String = ""
val publisher: String = ""
val location: String = ""
val postId: String? = ""
val rooms: String = ""
val caption: String = ""
val dateTime: String = ""
val expandable: Boolean = false
)
val關鍵字使該資料類的屬性不可變。這意味著您在初始化后無法更改其屬性。
要使屬性可變,您可以使用var.
例如:
val housePost = HousePost() // This will use all the default value
housePost.expandable = true // Val cannot be reassigned
要像這樣進行可擴展的可變使用var:
data class HousePost(
.
.
.
var expandable: Boolean = false
)
val housePost = HousePost()
housePost.expandable = true // Can be reassigned
編輯
您收到錯誤(沒有找到類的設定器/欄位錯誤),因為您將類屬性標記為私有。您可以通過洗掉當前類中的私有、建構式、getter 和 setter 來簡單地修復它。
還有其他方法可以在類中定義屬性。在學習程序中,您將了解如何使用它們。
class HousePost {
var uid: String = ""
var postImage: String = ""
var rent: String = ""
var description: String = ""
var publisher: String = ""
var location: String = ""
var postId: String? = ""
var rooms: String = ""
var caption: String = ""
var dateTime: String = ""
var expandable: Boolean = false
}
或這個:
class HousePost (
var uid: String = ""
var postImage: String = ""
var rent: String = ""
var description: String = ""
var publisher: String = ""
var location: String = ""
var postId: String? = ""
var rooms: String = ""
var caption: String = ""
var dateTime: String = ""
var expandable: Boolean = false
)
uj5u.com熱心網友回復:
您只需簡單地執行此操作。洗掉功能,無法使用
class HousePost {
private var uid: String = ""
private var postImage: String = ""
private var rent: String = ""
private var description: String = ""
private var publisher: String = ""
private var location: String = ""
private var postId: String? = ""
private var rooms: String = ""
private var caption: String = ""
private var dateTime: String = ""
var expandable: Boolean = false
constructor()
constructor(uid: String,
postImage: String,
rent: String,
description: String,
location: String,
postId: String,
publisher: String,
rooms: String,
caption: String,
dateTime: String) {
this.uid = uid
this.postImage = postImage
this.rent = rent
this.description = description
this.location = location
this.postId = postId
this.publisher = publisher
this.rooms = rooms
this.caption = caption
this.dateTime = dateTime
this.expandable = false
}
}
uj5u.com熱心網友回復:
Kotlin 提供了 defaultgetters和settersfor properties,您不必手動定義它們。
在科特林
var data: String = ""
相當于
var data: String = ""
get() = field
set(value) {
field = value
}
因為 Kotlin 編譯器會為您生成它。但是,如果您只想制作 your getter publicbut not setter,那么您可以覆寫setter
var data: String = ""
private set
你也可以這樣做getter。
這個類應該對我的資料庫中的資料進行建模。這是 Kotlin 中的正確方法嗎?
不,這不是在 Kotlin 中定義模型類的正確方法。Kotlin 提供了data類,其主要功能是保存資料。Data class主建構式至少需要一個引數。
因此,您的模型類可以像這樣重構
data class HousePost(
var uid: String = "",
var postImage: String = "",
var rent: String = "",
var description: String = "",
var publisher: String = "",
var location: String = "",
var postId: String? = "",
var rooms: String = "",
var caption: String = "",
var dateTime: String = "",
var expandable: Boolean = false
)
在任何情況下,如果您只需要任何欄位的私有設定器,您可以創建該constructor屬性private,然后創建一個委托給該私有欄位的公共屬性。
data class HousePost(
private var _uid: String = "",
var postImage: String = "",
var rent: String = "",
var description: String = "",
var publisher: String = "",
var location: String = "",
var postId: String? = "",
var rooms: String = "",
var caption: String = "",
var dateTime: String = "",
var expandable: Boolean = false
) {
val uid: String get() = _uid
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/466531.html
標籤:爪哇 安卓 科特林 哎呀 firebase-实时数据库
