gpt4 book ai didi

java - kotlin 中数据类的流利方法

转载 作者:行者123 更新时间:2023-12-01 11:23:52 25 4
gpt4 key购买 nike

我们熟悉在 java 和其他编程语言中调用方法的流畅接口(interface)。例如:

Picasso.with(this).load(url).into(imageView);

这可以通过 setter 方法返回所需类型的对象来实现。
public Picasso with(Context context)
{
this.context = context;
return this;
}

public X load(String url)
{
this.url = url;
return this;
}

public Y load(ImageView imageView)
{
this.imageView = imageView;
return this;
}

我正在尝试对 kotlin 数据类 做同样的事情但可悲的是我找不到一种方法来覆盖我可以返回该对象的新实例的 setter 方法。

当我尝试强制覆盖 setter 方法时出现编译器错误。
enter image description here

关于可以做什么的任何想法,以便我可以调用流利的接口(interface)或至少改变 setter 的工作方式
可能是这样的
data class CorruptOfficeAccount(.....){
override fun addCollectedFee(Long money) :CorruptOfficeAccount {
this.money = money/5
}
}

这样我就可以打电话
CorrutOfficeAccount(....).method1().addCollectedFee(20000).method3()

最佳答案

如果不需要返回任何内容,但 Name ,你可以这样做:

data class Name(var firstName: String, var lastName: String)

fun foo() {
val name = ...
name.apply {
firstName = ...
lastName = ...
}
}

或另一个例子:
CorrutOfficeAccount(....).apply {
method1()
addCollectedFee(20000)
method3()
}

传递给 apply 的函数内部(大括号内的内容) , this是对象 apply被调用,这使得可以引用成员函数和属性,如 firstName不写 name.firstName .

如果你对此不满意:不可能让实际的 setter 返回一些东西,但是你当然可以定义一个具有不同名称的方法并让它返回一些东西。

关于java - kotlin 中数据类的流利方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44098145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com