1、User类中创建了:public static final class Companion 嵌套类。同时在User类中创建累这个Companion的静态属性:public static final User.Companion Companion = new User.Companion((DefaultConstructorMarker)null); 2、kotlin的User类中的伴生对象是匿名的,所以转成java使用的类名是:Companion;如果半生对象是有指定名...
1. companion伴生对象 //kotlin实现代码classCompanionTest{companionobject{constvalTAG="this is a static message"funtestFunction(){}}} //对应的java代码publicfinalclassCompanionTest{@NotNullpublicstaticfinalStringTAG="this is a static message";publicstaticfinalTest.CompanionCompanion=newTest.Companion((Defa...
在Kotlin中,伴生对象是使用两个关键字companion object来声明,它的出现主要是为了解决Java中静态变量、静态方法和成员变量、成员方法混写在一个类中杂乱的问题,因此Kotlin中取消了static关键字 companion object中的属性和方法只能通过类调用,而不能通过实例对象 如下 class Companion(private val name: String) { ...
classMyClass{companionobject{@JvmStaticfunaStaticFuncation(){}}} 这是相应的Java代码(因为完整的代码太长了,所以简化一下) publicclassMyClass{publicstaticfinalMyClass.CompanionCompanion=newMyClass.Companion();funaStaticFunction(){Companion.aStaticFunction();}publicstaticfinalclassCompanion{publicfinalvoidaStat...
classMyClass{companionobjectFactory{funcreate():MyClass=MyClass()}} 该伴生对象的成员可通过只使用类名作为限定符来调用: valinstance=MyClass.create()//等价于valinstance=MyClass.Factory.create() 可以省略伴生对象的名称,在这种情况下将使用名称:Companion: ...
AJavaClass.staticFun();AKotlinClass.Companion.companionFun(); 从Java 的调用我们可以发现,companion object 的 JVM 字节码体现,是一个声明了一个叫 Companion 的 static 变量。 而Kotlin 调用一致,其实是编译器的特殊处理的结果。 如果我们反编译AKotlinClass,可以看到: ...
public class testExtensionProperty { public static void main(String[] args) { StringBuilder builder = new StringBuilder("liuqinhou"); out.println(StringUtilKt.getLastChar(builder)); } } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ...
}// $FF: synthetic methodpublicCompanion(DefaultConstructorMarker $constructor_marker){this(); } } } 注意这几处: @NotNullpublicstaticfinalStringWRITE_FILE_NAME="myData";@NotNullpublicstaticfinalCompanionCompanion=newCompanion((DefaultConstructorMarker)null);publicstaticfinalclassCompanion{@NotNullpublicfi...
在上面的例子中,我们知道了可以在 Java 代码中调用 Kotlin 中伴生对象的成员,类似于 Java 类中的静态成员。但是看上去和 Java 中的还是略有区别,因为类名和方法名/属性setter,getter方法名之间多了个伴生对象的名称或者 Companion 关键字。如何使其在调用的时候与 Java 中的调用看上去一样呢?
伴随对象在定义时不能命名,因为它们的名称始终为Companion。但是,可以使用类名来访问伴随对象。例如,MyClass.Companion.myFunction()。 如果不需要创建类的实例,则可以省略伴随对象的名称。 总结 伴随对象是Kotlin中的一个非常强大的特性,它可以像静态成员一样工作,并且具有更大的灵活性和功能。它可以访问类的私有构造...