首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将静态变量从Java转换为Kotlin

将静态变量从Java转换为Kotlin
EN

Stack Overflow用户
提问于 2016-02-01 03:41:47
回答 2查看 22K关注 0票数 26

我正在尝试将以下代码转换为Kotlin,并且仍然保留Java使用的一个类(Foo)。进行这种转换的正确方法是什么?

原始Java:

代码语言:javascript
复制
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();
    }
}

自动将Foo转换为Kotlin

代码语言:javascript
复制
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)
}

问题:

Bar类不能再访问C_ID或值(错误:“私有访问”)

如果我把"const“放在C_ID前面,就行了.但我不能对值做同样的事情("const“只能用于原语或字符串)

有没有一种不同的方式(这样Java代码和Kotlin代码都可以访问Foo中的所有内容)?

EN

回答 2

Stack Overflow用户

发布于 2016-12-01 21:24:22

在你的foo类中,你可以把这些属性和方法放在一个伴生对象中:

代码语言:javascript
复制
class Foo {

  companion object {
     val C_ID:String = "ID"
     val C_NAME:String = "NAME"
     @JvmField val VALUES = arrayOf("X", "Y", "Z")

     fun getAll():Array<String> {
        return arrayOf(C_ID, C_NAME)
     }
  }
}

然后,您可以调用Foo.getAll()以及Foo.C_ID、Foo.C_NAME和Foo.VALUES。

票数 7
EN

Stack Overflow用户

发布于 2016-02-01 04:18:42

您应该能够访问“kotlin方式”的值:

代码语言:javascript
复制
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)
}

fun main(args: Array<String>) {
    Foo.all.forEach { it->println(it) }
}

结果是:

代码语言:javascript
复制
ID
NAME

Process finished with exit code 0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35118514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档