Kotlin 和构造函数,初始化
Kotlin and constructors, initializing
很抱歉问了一个非常新手的 Kotlin 问题,但我正在努力理解与构造函数和初始化相关的一些事情。
我有这个 class 和构造函数:
class TestCaseBuilder constructor(
caseTag: String = "Case",
applType: Buy.ApplFor = Buy.ApplFor.PROOFFINANCE,
komnr: String = "5035") {
var caseTag: String = caseTag
var applType: Buy.ApplFor = applType
var komnr: String = komnr
我在这里要做的是在构造函数中使用三个可选参数,并为它们使用默认值。我在 class 正文中声明它们的原因是因为我需要从主 class.
访问它们
现在,此代码有效。当我 运行 它时没有错误。但是 IntelliJ 对变量给出了以下注释(例如:caseTag):
Property is explicitly assigned to parameter caseTag, can be declared
directly in constructor.
我在搜索时发现这是使用 init {} 的示例,但我得到的结果包括两次初始化变量,一次在构造函数中,然后在 init {} 中。我会说哪个显然不正确?
在构造函数中拥有(或拥有)可选参数,然后从中创建 class 个变量有什么更好的?
您可以直接在主构造函数中声明属性。这意味着您可以在 class body:
中删除显式声明
class TestCaseBuilder constructor(
var caseTag: String = "Case",
var applType: Buy.ApplFor = Buy.ApplFor.PROOFFINANCE,
var komnr: String = "5035")
如果您的主构造函数没有任何注释或可见性修饰符(默认为 public
),您也可以删除 constructor
关键字。
@JvmOverloads
注解可以过载不同参数大小的构造函数
class TestCaseBuilder @JvmOverloads constructor(
var caseTag: String = "Case",
var applType: Buy.ApplFor = Buy.ApplFor.PROOFFINANCE,
var komnr: String = "5035"
)
然后 class 得到了三个带有可选参数的构造函数
val a = TestCaseBuilder("CaseA")
val b = TestCaseBuilder("CaseB", Buy.ApplFor.SomethingElse)
val c = TestCaseBuilder("CaseB", Buy.ApplFor.SomethingElse, "1111")
很抱歉问了一个非常新手的 Kotlin 问题,但我正在努力理解与构造函数和初始化相关的一些事情。
我有这个 class 和构造函数:
class TestCaseBuilder constructor(
caseTag: String = "Case",
applType: Buy.ApplFor = Buy.ApplFor.PROOFFINANCE,
komnr: String = "5035") {
var caseTag: String = caseTag
var applType: Buy.ApplFor = applType
var komnr: String = komnr
我在这里要做的是在构造函数中使用三个可选参数,并为它们使用默认值。我在 class 正文中声明它们的原因是因为我需要从主 class.
访问它们现在,此代码有效。当我 运行 它时没有错误。但是 IntelliJ 对变量给出了以下注释(例如:caseTag):
Property is explicitly assigned to parameter caseTag, can be declared
directly in constructor.
我在搜索时发现这是使用 init {} 的示例,但我得到的结果包括两次初始化变量,一次在构造函数中,然后在 init {} 中。我会说哪个显然不正确?
在构造函数中拥有(或拥有)可选参数,然后从中创建 class 个变量有什么更好的?
您可以直接在主构造函数中声明属性。这意味着您可以在 class body:
中删除显式声明class TestCaseBuilder constructor(
var caseTag: String = "Case",
var applType: Buy.ApplFor = Buy.ApplFor.PROOFFINANCE,
var komnr: String = "5035")
如果您的主构造函数没有任何注释或可见性修饰符(默认为 public
),您也可以删除 constructor
关键字。
@JvmOverloads
注解可以过载不同参数大小的构造函数
class TestCaseBuilder @JvmOverloads constructor(
var caseTag: String = "Case",
var applType: Buy.ApplFor = Buy.ApplFor.PROOFFINANCE,
var komnr: String = "5035"
)
然后 class 得到了三个带有可选参数的构造函数
val a = TestCaseBuilder("CaseA")
val b = TestCaseBuilder("CaseB", Buy.ApplFor.SomethingElse)
val c = TestCaseBuilder("CaseB", Buy.ApplFor.SomethingElse, "1111")