Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重写类kotlin中变量的get方法?_Java_Android_Kotlin_Data Class - Fatal编程技术网

Java 重写类kotlin中变量的get方法?

Java 重写类kotlin中变量的get方法?,java,android,kotlin,data-class,Java,Android,Kotlin,Data Class,我在Java中有一个模型类,我在kotlin中将其转换为数据类 public class VideoAssets implements Serializable { @SerializedName("type") @Expose String type; @SerializedName("mpeg") @Expose List<Mpeg> mpeg = null; @SerializedName("hls") @Exp

我在Java中有一个模型类,我在kotlin中将其转换为数据类

public class VideoAssets implements Serializable {

@SerializedName("type")
@Expose
String type;

@SerializedName("mpeg")
@Expose
List<Mpeg> mpeg = null;

@SerializedName("hls")
@Expose
String hls;

@SerializedName("widevine")
@Expose
WideVine wideVine;

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

public List<Mpeg> getMpeg() {
    return mpeg;
}

public void setMpeg(List<Mpeg> mpeg) {
    this.mpeg = mpeg;
}

public String getHls() {
    hls = Macros.INSTANCE.replaceURl(hls);
    return hls;
}

public void setHls(String hls) {
    this.hls = hls;
}

public WideVine getWideVine() {
    return wideVine;
}

public void setWideVine(WideVine wideVine) {
    this.wideVine = wideVine;
}
}
我在这里苦苦挣扎,因为我应该如何更新data类的get方法。 在搜索和参考 我甚至创建了一个似乎不起作用的非数据类

class VideoAssets(@SerializedName("mpeg") @Expose
              var mpeg: List<Mpeg> = emptyList(),
              @SerializedName("hls")
              @Expose
              val hlsUrl: String? = null,
              @SerializedName("widevine")
              @Expose
              val wideVine: WideVine? = null) : Serializable {
val hls: String? = hlsUrl
    get() = field?.let { Macros.replaceURl(it) }

}
class VideoAssets(@SerializedName(“mpeg”)@Expose
var mpeg:List=emptyList(),
@序列化名称(“hls”)
@暴露
val hlsUrl:字符串?=null,
@序列化名称(“widevine”)
@暴露
val wideVine:wideVine?=null):可序列化{
val hls:字符串?=hlsUrl
get()=字段?.let{Macros.replaceURl(it)}
}
当我试图检索
videoAssets.getHls()
时,它返回null,而它应该返回新值。对象
videoAssets.gethlsUrl()
具有该值,但“videoAssets.getHls()”不始终为空

有人能告诉我我遗漏了什么吗?

这是您的代码:

val hls: String? = hlsUrl
    get() = field?.let { Macros.replaceURl(it) }
这就是创建一个名为
hls
的属性,并给它一个名为
field
的支持字段(变量)。它最初将
hlsUrl
的值设置为传入构造函数的任何值(可能为null)

getter代码为
字段
获取该值,如果该值不为null,则调用
replaceURl
函数并返回结果,否则返回null

因此,如果将
hlsUrl
设置为null,
字段
将始终为null,
hls
getter将始终返回null。即使您稍后更新
hlsUrl
(我假设您正在更新,
字段的值在初始化时是固定的,如果我将值传递给构造函数,代码对我来说运行良好)

同样,Java代码的运行方式也不同—当它获得新的
hls
值时,它将存储该值并在下一个
get
的函数调用中使用它。您永远不会更改
字段的值,因此Kotlin代码每次都使用初始值

从技术上讲,您不需要backing字段,因为您总是有效地调用
hlsUrl?.let{Macros.replaceURl(it)}
。在这种情况下,您可以创建
hlsUrl
var并更新它,或者您可以在
hls
属性中添加一个setter,并在
获取新值时设置支持字段


,以防你没看见

我试图重现你的问题,但是。你能提供一份详细的报告吗?
val hls: String? = hlsUrl
    get() = field?.let { Macros.replaceURl(it) }