美文网首页
kotlin EditText.text 属性访问语法问题

kotlin EditText.text 属性访问语法问题

作者: 折剑游侠 | 来源:发表于2020-01-02 15:21 被阅读0次

之前et.text = "text"报错没有深究,直接用setText()代替了。

回看一下问题出在哪里、TextView为什么没有这个问题。

et.text = "str"
et.text = Editable.Factory.getInstance().newEditable("str")
et.setText("str")
val s = et.text

et.text = "str"报错Type mismatch,EditText使用属性访问语法,得像第二行这样写。

反编译成java来看没有任何区别,都是调用TextView.setText()方法。

第二行的写法

public static class Factory {
        private static Editable.Factory sInstance = new Editable.Factory();
        public static Editable.Factory getInstance() {
            return sInstance;
        }

        public Editable newEditable(CharSequence source) {
            return new SpannableStringBuilder(source);
        }
}

Factory.newEditable()返回Editable,而Editable继承自CharSequence,用子类替代CharSequence没有问题。

为何kotlin非得要我们这么包装一下呢,下面看看EditText.getText()。

public Editable getText() {
        CharSequence text = super.getText();
        // This can only happen during construction.
        if (text == null) {
            return null;
        }
        if (text instanceof Editable) {
            return (Editable) super.getText();
        }
        super.setText(text, BufferType.EDITABLE);
        return (Editable) super.getText();
}

EditText.getText()返回Editable,所以第一行报错Type mismatch是匹配不上getText()方法。

使用属性访问语法时,编译器会同时检查get()和set(),这里要兼容get()将String向下转型为Editable。

当然,直接调用setText()是没有任何问题的。

TextView没有这个问题是因为TextView的get()方法返回CharSequence。而EditText继承TextView重写了getText()。

public CharSequence getText() {
        return mText;
}

相关文章

  • kotlin EditText.text 属性访问语法问题

    之前et.text = "text"报错没有深究,直接用setText()代替了。 回看一下问题出在哪里、Text...

  • 20.Kotlin属性委托

    Kotlin属性委托(delegated property) 示例代码 输出 语法是: val/var <属性名>...

  • 点语法与self关键字

    1.点语法 如果给属性提供了getter和setter方法, 那么访问属性就又多了一种访问方式 , 点语法 点语法...

  • 第二部分 对象

    3.1 语法 文字语法 构造形式: 3.3.2 属性与方法 如果访问的对象属性是一个函数,可说成“方法访问”。但从...

  • Kotlin与Java混合开发(3)✔️Java调用Kotlin

    访问 Kotlin 属性访问包级别成员使用 文件名 访问使用 @file:JvmName("自定义名") 访问实例...

  • 2018-01-17

    访问、添加对象的属性和方法的两种方式 一.访问对象的属性 1.1 点语法 格式: 访问对象属性: 对象名.属性名 ...

  • 点语法

    如果给属性提供了getter和setter方法, 那么访问属性就又多了一种访问方式 , 点语法 点语法其实它的本质...

  • .与->,由此引申出的属性与成员变量的问题

    .语法 访问类的属性,调用set和get ->语法 访问成员变量,成员变量默认受到保护protected,手动设置...

  • Kotlin学习之基础语法

    写在前面的:1,Kotlin学习之基础语法2,Kotlin学习之类和继承3,Kotlin学习之属性和字段4,Kot...

  • Kotlin调用Java

    一、属性 Kotlin调用属性实际上就是访问getter、setter方法,Java类只要提供了getter方法,...

网友评论

      本文标题:kotlin EditText.text 属性访问语法问题

      本文链接:https://www.haomeiwen.com/subject/fnkooctx.html