Sunday, January 27, 2019

What is the equivalent of Java static methods in Kotlin?



There is no static keyword in Kotlin.




What is the best way to represent a static Java method in Kotlin?


Answer



You place the function in the "companion object".



So the java code like this:



class Foo {
public static int a() { return 1; }
}



will become



class Foo {
companion object {
fun a() : Int = 1
}
}



You can then use it from inside Kotlin code as



Foo.a();


But from within Java code, you would need to call it as



Foo.Companion.a();



(Which also works from within Kotlin.)



If you don't like having to specify the Companion bit you can either add a @JvmStatic annotation or name your companion class.



From the docs:






An object declaration inside a class can be marked with the companion

keyword:



class MyClass {
companion object Factory {
fun create(): MyClass = MyClass()
}
}


Members of the companion object can be called by using simply the class

name as the qualifier:



val instance = MyClass.create()


...



However, on the JVM you can have members of companion objects generated
as real static methods and fields, if you use the @JvmStatic
annotation. See the Java interoperability section for more details.





Adding the @JvmStatic annotation looks like this



class Foo {
companion object {
@JvmStatic
fun a() : Int = 1;
}
}



and then it will exist as a real Java static function, accessible from
both Java and Kotlin as Foo.a().



If it is just disliked for the Companion name, then you can also
provide an explicit name for the companion object looks like this:



class Foo {
companion object Blah {

fun a() : Int = 1;
}
}


which will let you call it from Kotlin in the same way, but
from java like Foo.Blah.a() (which will also work in Kotlin).


No comments:

Post a Comment

plot explanation - Why did Peaches' mom hang on the tree? - Movies & TV

In the middle of the movie Ice Age: Continental Drift Peaches' mom asked Peaches to go to sleep. Then, she hung on the tree. This parti...