我有一个如下kotlin类:
open class E {
@JvmField var name:String = "kotlin eee"
}
一个java类,继承 E
public class SubE extends E{
public String name = “sub eee”
}
现在在kotlin 中有如下代码:
var subE = SubE()
println(subE.name) // 这行代码包如下错误
Overload resolution ambiguity. All these functions match.
public final var name: String! defined in com.java.invokefromkotlin.callkotlin.SubE
@JvmField public final var name: String defined in com.java.invokefromkotlin.callkotlin.SubE
但是如果java中调用就没有任何问题:
SubE subE = new SubE();
System.out.println(subE.name) // ok 没有任何问题
如果把kotlin E 换成是一个java类E,然后由SubE 继承:
public class E {
public String name = "java eee"
}
那么不管是在java中还是在kotlin中 访问SubE的 name 都ok
实在想不通为什么会这样。求大神们解惑
kotlin刚出没多久,你就用上了啊,
两个类有同样命名和类型的变量,自然冲突,你换个命名
因为上面kotlin里面的name,已经被你给赋值了,所以在他里面已经被认为是一个常量了,所以不能再次背赋值,而你二次在你的子类里面又进行了赋值,所以报错。
kotlin中的属性和java中的字段不是一个意思,区分清楚了就明白为什么了