是否可以在编译时验证是否为Kotlin中的工厂类调用了所需的函数?
这在语法上很难理解,但我认为它表达了我想要的 我已经为这个需求实现了一个引发错误的运行时,但是我想在编译时检查一下是否可以在编译时验证是否为Kotlin中的工厂类调用了所需的函数?,kotlin,factory-pattern,builder-pattern,Kotlin,Factory Pattern,Builder Pattern,这在语法上很难理解,但我认为它表达了我想要的 我已经为这个需求实现了一个引发错误的运行时,但是我想在编译时检查一下 如果可能的话,我想我应该使用注释。但在编译时这真的可能吗?对于Kotlin,我一直在避免构建器模式,因为我们总是可以为非强制字段指定默认值 class ModelFactory { fun setA() : ModelFactory { // blabla... } fun setB() : ModelFactory { /
如果可能的话,我想我应该使用注释。但在编译时这真的可能吗?对于Kotlin,我一直在避免构建器模式,因为我们总是可以为非强制字段指定默认值
class ModelFactory {
fun setA() : ModelFactory {
// blabla...
}
fun setB() : ModelFactory {
// blabla...
}
fun setC() : ModelFactory {
// blabla...
}
fun build() : Model {
// An error occurs if any of setA, setB, and setC is not called.
}
}
//example
fun successTest() {
ModelFactory().setA().setB().setC().build() // No error occurs at compile time
}
fun failTest() {
ModelFactory().setA().build() // An error occurs at compile time because setB and setC are not called.
}
如果仍要使用生成器模式,可以使用步骤生成器模式,该模式要求在创建对象之前设置所有必填字段。请注意,每个setter方法都返回下一个setter接口的引用。根据必填字段的组合,可以有多个步骤生成器
class ModelFactory {
fun setA() : ModelFactory {
// blabla...
}
fun setB() : ModelFactory {
// blabla...
}
fun setC() : ModelFactory {
// blabla...
}
fun build() : Model {
// An error occurs if any of setA, setB, and setC is not called.
}
}
//example
fun successTest() {
ModelFactory().setA().setB().setC().build() // No error occurs at compile time
}
fun failTest() {
ModelFactory().setA().build() // An error occurs at compile time because setB and setC are not called.
}
对于Kotlin,我一直在避免构建器模式,因为我们总是可以为非必填字段指定默认值
class ModelFactory {
fun setA() : ModelFactory {
// blabla...
}
fun setB() : ModelFactory {
// blabla...
}
fun setC() : ModelFactory {
// blabla...
}
fun build() : Model {
// An error occurs if any of setA, setB, and setC is not called.
}
}
//example
fun successTest() {
ModelFactory().setA().setB().setC().build() // No error occurs at compile time
}
fun failTest() {
ModelFactory().setA().build() // An error occurs at compile time because setB and setC are not called.
}
如果仍要使用生成器模式,可以使用步骤生成器模式,该模式要求在创建对象之前设置所有必填字段。请注意,每个setter方法都返回下一个setter接口的引用。根据必填字段的组合,可以有多个步骤生成器
class ModelFactory {
fun setA() : ModelFactory {
// blabla...
}
fun setB() : ModelFactory {
// blabla...
}
fun setC() : ModelFactory {
// blabla...
}
fun build() : Model {
// An error occurs if any of setA, setB, and setC is not called.
}
}
//example
fun successTest() {
ModelFactory().setA().setB().setC().build() // No error occurs at compile time
}
fun failTest() {
ModelFactory().setA().build() // An error occurs at compile time because setB and setC are not called.
}
不幸的是,不是在编译时,这是健壮的单元和集成测试非常有用的地方!现在,我正在寻找一个解决方案方向与自定义皮棉。在代码中,这似乎是最好的方法。不幸的是,在编译时不是这样,这是健壮的单元和集成测试有用的地方!现在,我正在寻找一个解决方案方向与自定义皮棉。在代码中,这似乎是最好的方法。