当前位置: 首页 > 知识库问答 >
问题:

应为getter或setter属性

须新
2023-03-14

我不明白为什么我必须对类中的私有属性使用getter或setter。

class MyView(context: Context?) : View(context) {
    private var bmp? : Bitmap = null

    init {
        bmp = BitmapFactory.decodeResource(resources, R.mipmap.ic_launcher)
    }

    override fun onDraw(canvas: Canvas?) {
        super.onDraw(canvas)
        canvas?.drawColor(Color.BLUE)
        canvas?.drawBitmap(bmp,10f,10f, null)
    }
}

共有1个答案

沈单弓
2023-03-14

问题是,您将使用安全调用运算符创建Nullable对象,但您的语法是错误的。尽管将放在variable中,但仍需要将其放在Reference类型。

检查正确的语法:

private var bmp : Bitmap? = null

然后您可以使用安全调用操作符访问这个变量,如下所示:

bmp?.someMethodCall() // This line will never throw you null pointer exception because of ? (Safe call operator)
 类似资料:
  • 有两种类型的对象属性。 第一种是 数据属性。我们已经知道如何使用它们了。到目前为止,我们使用过的所有属性都是数据属性。 第二种类型的属性是新东西。它是 访问器属性(accessor properties)。它们本质上是用于获取和设置值的函数,但从外部代码来看就像常规属性。 Getter 和 setter 访问器属性由 “getter” 和 “setter” 方法表示。在对象字面量中,它们用 get

  • 利用 getter/setter 可以拦截操作对象的属性,在设置属性前或获取属性前做一些事情。 1. getter get语法将对象属性绑定到查询该属性时将被调用的函数。(MDN) // 语法 var 对象 = { get 属性名() { // 做一些事情 balabala return 值; } }; getter 在获取一个属性时被调用,同时返回 getter 的返回

  • 是否可以将属性获取器/设置器创建为函数? 标准getter/setter的工作如下: 我需要以下内容: 是的,我知道这是非正统的用法,是的,我知道我可以以不同的方式实现此功能。我只是对这在 JS/TS/ES6 中是否可行感兴趣。 更新 这是我得到的最接近的: 所以简而言之,如果可能的话,我想去掉后缀。

  • 问题内容: 我不是PHP开发人员,所以我想知道在PHP中,使用纯OOP风格的显式getter / setters是否具有私有字段(我喜欢这样)是否更受欢迎: 或只是公共领域: 谢谢 问题答案: 您可以使用php magic methods __get and __set.

  • 问题内容: 始终建议使用getter / setter访问私有变量。为什么最好将它们声明为public并对其进行访问。无论如何,我们正在使用getter和setter访问它? 问题答案: @mre的回答非常好,您的问题很重要。总结一下:您将对象的字段设置为私有,以控制其他对象使用它的方式。您的对象使用setter来: 限制和验证传递给设置器的数据 隐藏其内部数据结构(服务对其他对象感兴趣,而不是服