英文:
Kotlin interface in not accessible from Java class
问题
我在 Kotlin 上创建了一个接口。
interface IDataManager{
val dataType: String?
}
现在我正试图在我的 Java 类中获取它的变量,如下所示。
public static DataWrapper getInstance(IDataManager iDataManager) {
String dataType = iDataManager.getDataType();
return instance;
}
但我得到了一个错误:error: cannot find symbol iDataManager.getDataType()
。
英文:
I have created an interface on kotlin.
interface IDataManager{
val dataType: String?
}
Now I am trying to get its variable in my java class, like following.
public static DataWrapper getInstance(IDataManager iDataManager) {
dataType= iDataManager.dataType;
return instance;
}
But I am getting error: cannot find symbol iDataManager.dataType
答案1
得分: 3
请调用 getter 函数以获取变量的值:
dataType = iDataManager.getDataType();
如果我们在 Kotlin 一侧使用属性,我们应该在 Java 一侧使用 getter 和 setter 来访问这些属性。
英文:
Please call getter function to get a value of the variable:
dataType = iDataManager.getDataType();
If we use properties on Kotlin side we should use getters and setters to access those properties on Java side.
答案2
得分: 0
编辑 - 正如Alexey在评论中指出的那样,这对于接口是不起作用的,因为属性需要有支持字段,而接口中的属性无法拥有这些。这仍然是有用的信息,但不适用于提问者的问题。
除了Sergey说的内容之外,如果你想将某些内容作为字段公开,而不是生成getter和setter,你还可以在这些内容上添加@JvmField
注解。
interface IDataManager {
@JvmField val dataType: String?
}
另一个有用的注解是@JvmStatic
,用于与Java互操作,你可以将它放在伴生对象中的属性和函数上,这样就不需要像这样:
Utils.Companion.coolUtility()
而可以像你习惯的这样写:
Utils.coolUtility()
英文:
edit - as Alexey points out in the comments, this doesn't work for interfaces, since the property needs a backing field and properties in interfaces can't have those. It's still useful to know, but it doesn't apply to the OP's question
As well as what Sergey said, you can add the @JvmField
annotation on things if you want to expose them as a field instead of generating the getters and setters
interface IDataManager{
@JvmField val dataType: String?
}
@JvmStatic
is another useful one for Java interop, you can put it on properties and functions in companion objects, so instead of this
Utils.Companion.coolUtility()
you can do this (like you're used to)
Utils.coolUtility()
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论