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

在Kotlin中创建接口时,属性是否有get/set是否重要?

郑宏朗
2023-03-14

在静态编程语言接口中,属性是否使用空get/set语句声明有关系?

例如。。。

interface ExampleInterface {
    // These...
    val a: String
        get
    var b: String
        get
        set

    // ...compared to these...
    val c: String
    var d: String
}

我很难注意到不同之处。

在实现接口时,我是否为属性使用getter/setters,或者我是否直接设置值似乎并不重要。

当通过java访问它们时,val都有getters,var都有getter和setters。

public void javaMethod(ExampleInterface e) {
    e.getA();

    e.getB();
    e.setB();

    e.getC();

    e.getD();
    e.setD();
}

共有1个答案

尤夕
2023-03-14

您的示例中的属性声明是相同的,< code>get和< code>set可以安全地从这里删除,因为正如您正确指出的,无论如何都会生成访问器。但是,带有< code>get和< code>set的语法可用于提供访问器实现或限制其可见性。

>

  • 提供实施:

    interface ExampleInterface {
        var b: String
            get() = ""
            set(value) { }
    }
    

    此示例显示了在接口中声明的属性的默认实现。此属性仍然可以在接口实现中重写。

    class Example {
        var b: String = ""
            get() = "$field$field"
    }
    

    在这里,< code>get() =...用支持字段重写属性的默认getter行为,而没有提到< code>set,因此它的行为正常。

    可见性限制:

    class Example {
         var s: String = "s"
             private set
    }
    

    在此示例中,setter 可见性是私有的。get 的可见性始终与属性的可见性相同,因此无需单独指定它。接口不能声明私有成员。

    abstract class Example { 
        abstract var b: String
            protected set // Restrict visibility
    }
    

    此属性的 setter 仅限于此类及其子类。接口无法声明受保护成员。

    当然,访问器实现可以与可见性限制相结合:

    class Example {
        var s: String = "abc"
            private set(value) { if (value.isNotEmpty()) field = value }
    }
    

    另见:

      < li >关于属性的Kotlin参考文章 < li >另一个答案中的属性可见性说明

  •  类似资料:
    • 我想定义一个具有只读属性的接口。例如; 但是,这会在栏上出现语法错误“预期';'”。我已将VisualStudio设置为使用ES5目标,因此支持getter。这是接口的限制吗?将来可能会发生这种变化;能够做到这一点是一件非常好的事情。

    • 本文向大家介绍List,Set, Map是否继承自Collection接口?相关面试题,主要包含被问及List,Set, Map是否继承自Collection接口?时的应答技巧和注意事项,需要的朋友参考一下 答:List,Set是Map不是

    • 问题内容: 如何使用没有方法的interface的引用变量调用方法? 问题答案: 在该 Java文档说… 。 这就是为什么您可以在接口引用上调用方法的原因

    • 用于和的xml布局文件中,如下所示: SO上的一些人说是不推荐的,而其他人仍然建议使用它。有时,在不起作用时,甚至似乎有必要使用它。(看这里,这里,这里) 医生应该是回答这个问题的地方,对吗?在这里,他们说: 在API级别3中不推荐使用此常量。

    • 字段的属性似乎不起作用。 在HTML5中有没有其他属性可以帮助我设置字段值的最小长度?

    • 问题内容: 我重新编写了我们的数据库类(基于PDO),并陷入了困境。我被教导如何在PHP和MySQL中使用以及在UTF-8中使用。 在PDO中,我现在想使用参数,但它仅支持一个查询。 有必要吗? 问题答案: 利用使用后实际上会重置,并以 和分别。 该手册指出 相当于 SET character_set_results = x; SET character_set_connection = x; 和