Kotlin:将函数传递给类

Posted

技术标签:

【中文标题】Kotlin:将函数传递给类【英文标题】:Kotlin: passing a function to a class 【发布时间】:2022-01-19 12:50:24 【问题描述】:

我有按钮。那应该调整大小并随窗口移动。我的问题是,由于按钮具有不同的位置,因此通过窗口细节一一调整它们的大小非常难看,所以我想将一个函数传递给我的 Buttons,该函数计算窗口大小调整时它们的放置位置。

我希望这个函数是唯一的,所以当我初始化一个按钮时,我给它一个 lambda 表达式(它使用窗口的细节),每次调用按钮的 updateSize 方法时,它都会使用这个 lambda 表达式来设置它的位置和大小。

示例代码:

//To make it easier let's say window is a global variable

MyButton( return Rectange(window.x, window.y, window.w, window.h) ,"ButtonName")

class MyButton(updateSize(x,y,w,h) -> Rectangle,name: String )  
  var rect: Rectangle = updateSize
  fun updateSize() 
    rect = updateSize
  

显然这段代码不起作用。

【问题讨论】:

这是什么 UI 框架?您通常会使用像布局管理器这样的 IME,它会为您处理所有这些。 【参考方案1】:

我不完全确定这是否是您想要的,但又如何:

class MyButton(private val getRectangle: () -> Rectangle, name: String )  
    var rect: Rectangle = getRectangle.invoke()
    fun updateSize() 
        rect = getRectangle.invoke()
    

然后你可以做类似的事情

val button1 = MyButton(  Rectangle(window.x, window.y, window.w, window.h) ,"ButtonName")

也许还有另一个按钮

val button2 = MyButton(  
    val x = 10
    val y = someOtherFunction()
    Rectangle(x, y, window.w, window.h)
,"ButtonName")

【讨论】:

但是我必须为我拥有的每个按钮都这样做,这会打败 porpuse。我想要做的是传递一个稍后可以由该类调用的函数。因此,我将 fun 传递给 Button,该按钮可以随时调用 fun。对于每个按钮,这个有趣的方法都会做一些别的事情 @Moonlander 就是这样工作的 @Moonlander 查看编辑 所以基本上我想做的就是在类中存储一个 lambda 表达式,我可以随时调用。在 cpp 中是可能的,但我在 java 或 kotlin 中找不到实现这一点的方法。所以我采取了另一种方式,并根据窗口的大小添加了一个偏移量。我知道我所说的似乎很混乱,因为我对问题的解释很糟糕,但是感谢您抽出宝贵的时间!

以上是关于Kotlin:将函数传递给类的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 数据类中的函数作为参数导致打包错误

如何将 Fire store ref 对象传递给另一个活动(Kotlin)?

如何使用 kotlin dsl Gradle 将编译器参数传递给 java Compiler

Kotlin语法基础,函数与闭包

Kotlin语法基础,函数与闭包

我应该将啥对象传递给需要 Void 的函数!在参数中? (科特林)