如何在kotlin的数据类中添加值?

Mar*_*ner 0 kotlin

在 java 中,我从服务器获得响应并将值添加到数据模型类,如下所示:

JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArray = jsonObject.getJSONArray("searches");
for (int i = 0; i < jsonArray.length(); i++) {
     JSONObject jsonObject1 = jsonArray.getJSONObject(i);
     SearchHomeModel searchHomeModel = new SearchHomeModel();
     searchHomeModel.setWord(jsonObject1.getString("word"));
     searchHomeModel.setUrl(jsonObject1.getString("url"));
     JSONArray jsonArray1 = new JSONArray(jsonObject1.getString("user"));
     for (int j = 0; j < jsonArray1.length(); j++) {
          JSONObject jsonObject2 = jsonArray1.getJSONObject(j);
          searchHomeModel.setUsername(jsonObject2.getString("username"));
          searchHomeModel.setId(jsonObject2.getString("id"));
          searchHomeModel.setImage(jsonObject2.getString("image"));
          }
     arrayList.add(searchHomeModel);
}
Run Code Online (Sandbox Code Playgroud)

所以,我切换到 kotlin,当我调用我的数据模型类时,我应该立即设置该值。

数据类

那么,如何从几个不同的地方(在“for”循环 JSONArray 中)设置数据类中的值?

这是 Java 中的 SearchHomeModel 类:

public class SearchHomeModel {

private String word, url, username, id, image, country, city, gender, job, age;
public String getWord() {
    return word;
}
public void setWord(String word) {
    this.word = word;
}
public String getUrl() {
    return url;
}
public void setUrl(String url) {
    this.url = url;
}
public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}
public String getImage() {
    return image;
}
public void setImage(String image) {
    this.image = image;
}
public String getCountry() {
    return country;
}
public void setCountry(String country) {
    this.country = country;
}
public String getCity() {
    return city;
}
public void setCity(String city) {
    this.city = city;
}
public String getGender() {
    return gender;
}
public void setGender(String gender) {
    this.gender = gender;
}
public String getJob() {
    return job;
}
public void setJob(String job) {
    this.job = job;
}
public String getAge() {
    return age;
}
public void setAge(String age) {
    this.age = age;
}

}
Run Code Online (Sandbox Code Playgroud)

在科特林中:

data class SearchHomeModel(
    val word: String,
    val url: String,
    val username: String,
    val id: String,
    val image: String,
    val country: String,
    val city: String,
    val gender: String,
    val job: String,
    val age: String
)
Run Code Online (Sandbox Code Playgroud)

Jul*_*ian 5

我会修改您的 SearchHomeModel 数据类,使其具有具有默认值的可变字段。

data class SearchHomeModel(
    var word: String = "default",
    var url: String = "default-url.com",
    ...
)
Run Code Online (Sandbox Code Playgroud)

所有构造函数 args 的默认值将允许您在没有显式 args 的情况下构造它,并使字段可变,var可以让您稍后像使用 setter 方法一样设置它们。

SearchHomeModel searchHomeModel = new SearchHomeModel();
searchHomeModel.word = jsonObject1.getString("word");
Run Code Online (Sandbox Code Playgroud)

也就是说,用尽可能多的参数构造它,如果在调用构造函数时能够可靠地知道某些参数,那么使用valover支持不可变字段var