先来看一个名为Message的类
在这个类中有一段包含在companion object中的代码,需要说一下的是,Kotlin的class并不支持static变量,所以需要使用companion object来声明static变量,其实这个platformStatic变量也不是真正的static变量,而是一个伴生对象,
这个伴生对象位于Message类中定义的一个叫做Companion的内部类中,如图:
可以看到在Kotlin中编译器自动生成类是很常见的事情,那么这个伴生对象作何理解呢?
我的理解是,伴生对象与单例模式相关,这个对象是Companion类的对象,伴随着Message类而生.
Companion这个内部类是编译器自动生成的,我们也可以自己定义内部类,如:
回到Message类中,我们可以看到在info和what域下还存在get和set,不错,这就是getter和setter函数,一般getter函数使用默认的就好,setter函数其实就是在赋值的时候进行一些处理,为了防止setter函数无限递归调用,在类中可以使用$符号访问成员变量,可以绕过getter和setter函数直接访问成员变量.
当然,在Kotlin中除了内部类,还有匿名类和局部类,如图:
匿名类:
可以看到r这个变量所属类型是匿名的(no name provided)
局部类:
局部类,就是在函数内部定义的类,只在函数内部可以访问.
在Kotlin中还提供了一些额外的特性,比如可变参数
这段代码运行结果如下:
让我们测试一下Message类:
可见Kotlin的getter和setter所起的作用
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
问题内容: 如何在我的匿名内部子类中获取传递给此方法的值? 我收到此错误: 无法在以其他方法定义的内部类中引用非最终变量userID 我很确定我不能将其赋值为final,因为它是一个未知值的变量。我听说这种语法确实以某种方式保留了作用域,所以我认为必须有一个我不太了解的语法技巧。 问题答案: 当然,您可以将其分配为final-只需将该关键字放入参数的声明中即可: 我不确定这是一个未知值的变量是什么
问题内容: 我想使用a 对图进行拓扑排序。为简便起见,我想为比较器使用匿名内部类。但是,我需要访问该图才能确定我正在查看的节点的程度。这可能吗? 正确的代码 问题答案: 是的,使其最终化: 有关最终关键字,请参见最终词: 匿名本地课程 第二种情况涉及最终变量,实际上是语言语义所规定的。在这种情况下,除非声明为final,否则Java编译器将不允许您使用变量。这种情况出现在闭包(也称为匿名本地类)中
问题内容: 请看下面的代码: 在上面的代码中,在方法ModifyList()中声明的匿名内部类的实例能够访问传递给该方法的参数。AFAIK Java为内部类创建一个单独的字节码文件。 谁能解释一下Java在字节码级别上如何处理这些局部变量绑定?我的意思是,Java如何精确跟踪对作为参数传递给该方法的对象的引用? 任何帮助将不胜感激! [抱歉我的英语不好! 如果您理解我的问题,请编辑这篇文章,并删除
本文向大家介绍C#基础之匿名方法实例教程,包括了C#基础之匿名方法实例教程的使用技巧和注意事项,需要的朋友参考一下 本文以实例形式讲解了C#的匿名方法的用法,分享给大家供大家参考之用。具体如下: 匿名方法是C# 2.0的语言新特性。首先看个最简单的例子: 这段代码在开始的时候初始化了一个字符串列表(string list),然后通过列表的FindAll方法来查找以“sunny”起始的字符串,最后将
问题内容: 在对象生命周期的什么时候使用匿名内部类作为PropertyChangeListener时,将收集类的垃圾?回收包含的类(SettingsNode)之后?是否应该在包含类(SettingsNode)的终结器中显式删除PropertyChangeListener? 问题答案: 像所有对象一样,当匿名内部类的最后一个引用不再引用它时,该匿名内部类也有资格进行垃圾回收。我在这里使用狡猾的措辞,
问题内容: 我想创建一个扩展另一个类的匿名内部类。 实际上,我要执行的操作如下: 这可能吗? 问题答案: 您不能给匿名类命名,这就是为什么它被称为“匿名”的原因。我看到的唯一选择是从您的外部范围引用变量 另一个选择是像这样定义一个本地类(不是匿名类): 如果您还需要更多,请创建一个常规类…
当我创建一个抽象类的对象时,我必须像接口一样这样做。 这是否意味着的对象是匿名的内部类对象?