【发布时间】:2021-01-17 19:25:13
【问题描述】:
对于一个 Android 项目,我有一个 .kt 文件:
class foo () {
enum class animal (var Id: Int) {
CAT(0),
DOG(1),
FISH(2),
}
}
还有一个.java文件,出现问题的地方:
public void processAnimal(int animalId) {
switch(animalId) {
case foo.animal.CAT.Id:
//do something
break;
case foo.animal.DOG.Id:
//do something else
break;
case foo.animal.FISH.Id:
//do something fishy
break;
}
}
在.Id 上,它给出了一个错误“Id 在 foo.animal 中有私有访问权限”,所以这不起作用。
由于 switch 语句,将 .Id 更改为 .getId() 会给出“需要常量表达式”。
在签名public void processAnimal(int animalId) { 中,类型为int 而不是animal,这是我无法控制的要求,如果它不是我无法控制的,这将是正确的解决方案。
在 .kt 文件中将字段标记为公开不会改变任何内容。
有没有办法实现我的目标?
谢谢!
【问题讨论】:
-
可能感兴趣:stackoverflow.com/questions/41039875/… 但我做不到。
-
你必须在java中使用
getId()。 Kotlin 成员变量不是原始字段,它们是 getter 和 setter,支持字段或实际变量始终是私有的(除非您使用 @JvmField 注释)。 -
是的,这不是静态的。但不幸的是,即使我将
enum class animal (var Id: Int) {更改为enum class animal (@JvmField var Id: Int) {,错误也会更改为“需要常量表达式”,因此显然即使 .Id 也不是静态的。