Java 重写类kotlin中变量的get方法?
我在Java中有一个模型类,我在kotlin中将其转换为数据类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
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) }