我正试图在Kotlin上重写我的android应用程序,在转换ContentProvider合同类时遇到了问题。所以我有一个简单的契约类(省略了内容类型和内容uri等默认内容):
public final class Contract {
public static final class Contacts {
public static final String NAME = "Name"
public static final String BIRTH = "Birth"
public static final String IMAGE = "Image"
}
}
如果我理解正确的话,在静态编程语言中,我们没有静态成员。相反,我们有“伴侣对象”。所以在将其转换为静态编程语言后,我有这样的代码:
object BirthdayContract {
class Contacts : BaseColumns {
companion object {
val NAME = "Name"
val BIRTH = "Birth"
val IMAGE = "Image"
}
}
}
但是当我试图访问像合同这样的字段时。联系人。姓名,我有错误:“姓名有私人访问”。更改可见性修改器没有任何效果。那么,在Kotlin中是否有某种方法可以使用这样的契约类,或者最好将其保留在Java中?
更新我认为我应该澄清-我的来电代码也在科特林。@JvmField注释中存在问题。有了它,我可以直接访问静态成员,而无需调用getter。
您可以使用@JvmStatic
object BirthdayContract {
class Contacts : BaseColumns {
companion object {
@JvmStatic val NAME = "Name"
@JvmStatic val BIRTH = "Birth"
@JvmStatic val IMAGE = "Image"
}
}
}
//Java
BirthdayContract.Contacts.Companion.getNAME()
到目前为止,我看不出有什么好的理由来扩展BaseColumns,所以更好的选择应该是
object BirthdayContract {
object Contacts {
const val NAME = "Name"
const val BIRTH = "Birth"
const val IMAGE = "Image"
}
}
//Java
BirthdayContract.Contacts.NAME
底线是kotlin中的嵌套对象看起来不干净。请考虑简化您的代码
要将常量公开为字段,请使用@JvmField
对其进行注释
class Contacts {
companion object {
@JvmField val NAME = "Name"
@JvmField val BIRTH = "Birth"
@JvmField val IMAGE = "Image"
}
}
然后,您可以像这样从Java中使用它们:
String name = Contacts.NAME;
一旦所有代码都在Kotlin中,就可以删除@JvmField注释。
< code>NAME是一个属性,默认情况下,它的后台字段具有私有访问权限。但是因为它是一个属性,所以有一个getter函数:< code>getNAME()。
因为这不是Java中自然访问常量的方式,所以有两种方法可以直接公开该字段:
常量
:
常量val NAME = "Name"
< li>
@JvmField
批注:< code > @ JVM field val NAME = " NAME "
问题内容: 我找到了一个代码,它声明了如下代码 它们之间有什么区别或相同?还是与或不同? 问题答案: 完全没有区别。根据 Java语言规范的8.3.1-类-字段修饰符, 如果两个或多个(不同的)字段修饰符出现在字段声明中,则按惯例(尽管不是必需的),它们的出现顺序与上面FieldModifier生产中所示的顺序一致。 对于字段,所述生产按以下顺序列出修饰符: 对于方法:
如何在使用Kotlin的Spring Boot中正确初始化ConfigurationProperties? 目前我喜欢下面的例子: 但是它看起来很丑陋,实际上不是一个iable,foo是常量ue,应该在启动期间初始化,将来不会改变。
我们正在开发基于spring boot 2.5.6的支付应用程序。该应用程序托管在docker上,并在Java14上启动。我们创建了一个名为的抽象类,它是,包含两个变量和。所有枚举类都扩展了这个基类,并在其中定义常量。 这个决定是为了定制整个应用程序层中使用的枚举。你可以在下面看到一个例子: 该类在实体层中用作嵌入变量,如下所示: 系统工作得很好,但是发生了一些错误,ShapeEnum的字段。RE
问题内容: 我已经在Google上进行了广泛的搜索,但均无济于事。我似乎无法将这个概念笼罩在脑海中。为什么本地班级会接受静态最终字段?如下面的以下示例: 在EnglishGoodbye课堂上,允许告别可变吗?为什么?我很困惑。为什么允许但没有静态变量?我知道为什么它不能访问封闭范围的成员,除非它们是一个编译器时间常数,因为当函数结束时这些变量不再存在,但类可能不存在。对?我只是对此感到困惑。 谢谢