Thursday 3 December 2020

use static Java methods as static (or singleton) properties in Kotlin

My SDK exposes a Java interface that has only static methods, e.g.

public interface MyDevice { 
  public static void setLocation(Location location) {…}
  public static Location getLocation() {…}
}

In Java app that uses the SDK, my customers can use these as if it were a singleton, e.g.

Location currentLocation = MyDevice.getLocation();

When this SDK is integrated into a Kotlin app, it would natural to express the same as property:

val currentLocation = MyDevice.location

The problem is, this built-in interop works for non-static methods only.

I can create a singleton in Kotlin and have it handle the translation:

object myDevice {
    var location: Location
    get() = MyDevice.getLocation()
    set(location) = MyDevice.setLocation(location)
}

But won't this single Kotlin file in an otherwise Java-only SDK effect negatively the customers who don't use Kotlin? Can the same be expressed in Java?

Or maybe I should simply convert MyDevice.java to Kotlin? What will be negative effects of such step for the customers who are still on Java?



from use static Java methods as static (or singleton) properties in Kotlin

No comments:

Post a Comment