Convertir des variables statiques à partir de Java à Kotlin

Je suis en train de convertir le code suivant à Kotlin ET ont encore l'une des classes (Foo) utilisé par Java. Quelle est la bonne façon de faire cette conversion?

Original Java:

public class Foo {
   public static final String C_ID = "ID";
   public static final String C_NAME = "NAME";
   public static final String[] VALUES = {"X", "Y", "Z"};

   public static String[] getAll() {
       return new String[] {C_ID, C_NAME};
   }
}

public class Bar {
    public void doStuff() {
        String var1 = Foo.C_ID;
        String[] array1 = Foo.VALUES;
        String[] array2 = Foo.getAll();
    }
}

Conversion automatique fo Foo de Kotlin

object Foo {
    val C_ID = "ID"
    val C_NAME = "NAME"
    val VALUES = arrayOf("X", "Y", "Z")

    val all: Array<String>
        get() = arrayOf(C_ID, C_NAME)
}

Problème:

Barre de classe ne peut plus accéder aux C_ID ou de VALEURS (erreur: "accès privé")

si j'ai mis "const" en face de C_ID, ça marche... mais je ne peux pas faire la même chose avec les VALEURS ("const" ne peut être utilisé sur primatives ou Chaîne)

Est-il une autre façon pour moi de faire cela (donc à la fois le code de Java et de Kotlin code peut accéder à tout Foo)?

  • bien que const val peut avoir l'effet dont vous avez besoin, le but est différent (compilateur constantes de temps) et il ne faut pas l'utiliser pour l'interopérabilité.