Kotlin 如何将外部可调用成员函数添加到匿名对象?
这是我第一次问问题,请原谅我问问题时的错误,如果出现这种情况,请告诉我如何提出更好的问题 我要问的是: 如何将成员函数添加到可在此对象外部调用的匿名对象中?或者这个要求太奇怪了,不应该实现 考虑如下: 如何添加一个函数Kotlin 如何将外部可调用成员函数添加到匿名对象?,kotlin,Kotlin,这是我第一次问问题,请原谅我问问题时的错误,如果出现这种情况,请告诉我如何提出更好的问题 我要问的是: 如何将成员函数添加到可在此对象外部调用的匿名对象中?或者这个要求太奇怪了,不应该实现 考虑如下: 如何添加一个函数fun bFunction(I:Int),该函数只属于变量,不属于AClass,可以直接使用 variable.bFunction(1) ??或者,这是不可能的 我尝试过的(当然,没有满足我想要的): 我可以创建一个有趣的AClass.b函数(I:Int)来解决它,但是这可能对
fun bFunction(I:Int)
,该函数只属于变量
,不属于AClass
,可以直接使用
variable.bFunction(1)
??或者,这是不可能的
我尝试过的(当然,没有满足我想要的):
- 我可以创建一个
来解决它,但是这可能对有趣的AClass.b函数(I:Int)
的其他实例“不公平”,因为它们实际上并不需要它李>AClass
- 我可以创建一个类,而不是在本地使用匿名对象,但是为一个变量创建一个类似乎太重了
- 我尝试在匿名对象的声明中添加
,其位置如上所述。但是,我只能在bFunction
内部访问此函数,而不能在此分配之外访问.apply{}
- 我曾尝试在
内部添加.apply{}
,但它也使我只能在b函数
内部访问它,而不是在本作业之外.apply{}
JFrame
中的“画布”或“纸”,在那里我可以通过像素控制在上面画任何我喜欢的东西,完全使用Kotlin
经过一些搜索,我发现这个问题的核心解决方案是,“如果我使用contentPane.graphics.drawXXX
series函数绘制一些东西,当显示这个JFrame时(我调整或最小化这个JFrame,或者太早调用这个draw函数),这个绘图就会消失。”(注意:我们可以使用Thread.sleep
来延迟过早调用)),is。然后,为了覆盖它,我使用var image=BufferedImage(…)
来存储我绘制的内容,并使用匿名对象
painting = object : JFrame()
{
override fun paint(g: Graphics?)
{
contentPane.graphics.drawImage(image, 0, 0, this)
}
}.apply { /* do some initialization */ }
覆盖paint
函数,并将这个缓冲图像绘制到contentPane中,这似乎达到了我想要的效果,只是一个“静态”绘制
我想知道如何将updatePainting()
函数添加到这个绘图
,这样我就可以修改这个缓冲图像,然后调用这个函数来更新绘图,作为“动态的”绘画。但是,在我输入这个问题的过程中,我意外地发现,只要修改这个图像,就会自动更新这幅画,而不需要手动更新这幅画。所以原来的问题实际上解决了:在我目前的情况下,这个B功能是不必要的。但是,我只是想知道,有没有如何实现这些东西,以适应这个(可能很奇怪)问题?实际上,这段代码(在匿名对象声明中使用b函数
)将非常好地工作,并将使b函数
可在外部访问…但仅当变量
为本地或私有时。在这两种情况下,它都必须与声明一起初始化,即val variable=object:AClass()…
公共/受保护属性需要一个可以在声明它们的类之外使用的类型,这并不奇怪。在这种情况下,您必须命名子类
你链接的页面涵盖了这一点
请注意,匿名对象只能在本地和私有声明中用作类型。如果将匿名对象用作公共函数的返回类型或公共属性的类型,则该函数或属性的实际类型将是匿名对象的已声明超类型,如果未声明任何超类型,则为任何类型。成员a匿名对象中的dded将不可访问
谢谢!最重要的是它必须像这样与声明一起初始化,以避免
变量
的显式类型声明,避免变量
的“类型缩小”,这将使变量
失去函数
。是的,这正是原因。
painting = object : JFrame()
{
override fun paint(g: Graphics?)
{
contentPane.graphics.drawImage(image, 0, 0, this)
}
}.apply { /* do some initialization */ }