我可以从内联函数更改实例的分配吗?

时间:2019-01-24 08:20:18

标签: android kotlin

我制作了一个内联函数以缩小位图的大小并创建另一个。

private fun Bitmap.limitSizeTo(maxSize: Int): Bitmap {
    var width = this.width
    var height = this.height

    val bitmapRatio = width.toFloat() / height.toFloat()
    if (bitmapRatio > 1) {
        width = maxSize
        height = (width / bitmapRatio).toInt()
    } else {
        height = maxSize
        width = (height * bitmapRatio).toInt()
    }
    return Bitmap.createScaledBitmap(this, width, height, true)
}

原样:

var resizedBitmap = bitmap.limitSizeTo(100)
doSomething(resizedBitmap)

成为:

bitmap.limitSizeTo(100)
doSomething(bitmap)

我尝试但未编译的是:

private fun Bitmap.limitSizeTo(maxSize: Int): Bitmap {
    var width = this.width
    var height = this.height

    val bitmapRatio = width.toFloat() / height.toFloat()
    if (bitmapRatio > 1) {
        width = maxSize
        height = (width / bitmapRatio).toInt()
    } else {
        height = maxSize
        width = (height * bitmapRatio).toInt()
    }
    this = Bitmap.createScaledBitmap(this, width, height, true)
}

我认为“成为”代码更酷,是吗? 有人知道怎么做吗?

1 个答案:

答案 0 :(得分:2)

没有这是不可能的,IMO也不希望这样做。您不能像这样更改扩展函数的接收者,最好的方法是简单地返回一个新的,编辑的,不变的实例。就像您一开始所做的一样:

val resizedBitmap = bitmap.limitSizeTo(100)
doSomething(resizedBitmap)