kotlin是如何改造静态成员变量与静态方法的?
在java中,定义一个静态成员变量用static关键字即可。静态成员变量属于类和类的所有实例,当类被继承后,子类也出现了相同的静态成员变量,此时相同名称的静态变量使用起来就很是尴尬了。你要非常小心的考虑继承关系和静态成员变量所在的位置。
为了避免这种混乱的问题,kotlin提出了伴生对象的概念。简单来说,一个类与生俱来的就存在一些实例。这些实例拥有类的所有方法同时还有自己独特的变量和方法。
kotlin类中代码
class KClass {
val name = "kkk"
companion object {
val size = 15
}
}
Java类中调用kotlin
public class JClass {
public static void main(String[] args) {
// name无法通过类进行访问
// KClass.name
// name可以通过一个对象进行访问
KClass k = new KClass();
k.name; // 可以访问
// size通过类也不能访问
// KClass.size
// size通过一个对象也不能访问
// k.size; //size不是成员变量,不属于KClass
// companion object是伴声对象,类似于java中静态变量的概念
KClass.Companion.size; // 可以访问到该变量
}
}
那么问题来了,java中serialVersionUID必须是类的静态成员变量才有意义
在java中的一些基本规则必须要用到静态成员变量,比如类进行序列化Serializable的基本规则,就用到了一个类的静态成员变量,该怎么办呢?
kotlin的伴生对象的成员变量加关键字const
class KClass {
companion object {
private const val serialVersionUID = 110L
}
}
好了,此时的serialVersionUID就是java中的static一样的东西了。
类似于
static final long serialVersionUID = 42L;