Kotlin 我希望委托对象访问主对象的私有字段
我想以可能的最佳方式构造代码,但我面临一个问题。 我想将绘制数据的任务委托给另一个对象。但是,另一个对象需要访问第一个对象的私有字段 我有一段代码:Kotlin 我希望委托对象访问主对象的私有字段,kotlin,design-patterns,delegates,structure,access-modifiers,Kotlin,Design Patterns,Delegates,Structure,Access Modifiers,我想以可能的最佳方式构造代码,但我面临一个问题。 我想将绘制数据的任务委托给另一个对象。但是,另一个对象需要访问第一个对象的私有字段 我有一段代码: class Grid { private val matrix = Array<Array<Int?>>(10) { Array(10) { null } } private val gridDraw = GridDraw(this) fun draw(canvas: Canvas) {
class Grid {
private val matrix = Array<Array<Int?>>(10) { Array(10) { null } }
private val gridDraw = GridDraw(this)
fun draw(canvas: Canvas) {
gridDraw.draw(canvas)
}
...
}
类网格{
私有val矩阵=数组(10){Array(10){null}
private val gridDraw=gridDraw(此)
趣味绘画(画布:画布){
draw.draw(画布)
}
...
}
我希望GridDraw对象的draw()方法访问矩阵属性。如果matrix是一个私有字段,我不能这样做,我不想公开它
我不喜欢在draw方法中传递矩阵的想法,因为将来我可能需要为这个方法添加更多的参数
有办法解决这个问题吗?为什么不公开矩阵?在没有矩阵的完整上下文的情况下,真的可以画图吗 这个问题的答案将推动您实现。至少,您需要从绘制它所需的矩阵(可能是整个矩阵)中公开必要的数据,或者构造
网格
类,使其能够绘制自身
虽然如果您只担心在将来使用更多参数扩展draw
方法,那么这应该是一个很容易解决的问题。创建一个包含矩阵的GridDrawContext
类,并让您的GridDraw
类接受该上下文对象,而不是Grid
本身
然后您可以进一步扩展上下文类,而不是更改draw
接口
class Grid {
private val matrix = Array<Array<Int?>>(10) { Array(10) { null } }
// future field
private val foo = "bar"
private val gridDraw = GridDraw(GridDrawContext(matrix, foo))
fun draw(canvas: Canvas) {
gridDraw.draw(canvas)
}
...
}
data class GridDrawContext(
val matrix: Array<Array<Int?>>,
val foo: String
)
类网格{
私有val矩阵=数组(10){Array(10){null}
//未来领域
private val foo=“bar”
private val gridDraw=gridDraw(GridDrawContext(矩阵,foo))
趣味绘画(画布:画布){
draw.draw(画布)
}
...
}
数据类GridDrawContext(
val矩阵:数组,
瓦尔福:字符串
)
如果GridDraw需要一个矩阵才能绘制,请将该矩阵作为其draw()函数的第二个参数,并在调用时传递矩阵
在GridDraw中:
fun draw(canvas: Canvas, matrix: Array<Array<Int?>>) {
// use the canvas and matrix to draw it
}
fun draw(画布:画布,矩阵:数组){
//使用画布和矩阵绘制它
}
我不知道GridDraw中有什么,但是如果它只是一个实用函数包装器,您可能可以删除它对网格的属性引用。看起来您的设计具有不必要的相互依赖性,因为当前网格和GridDraw类必须双向引用