在静态编程语言接口中,属性是否使用空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();
}
您的示例中的属性声明是相同的,< 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 }
}
另见:
我想定义一个具有只读属性的接口。例如; 但是,这会在栏上出现语法错误“预期';'”。我已将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; 和