是否可以在编译时验证是否为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.
}

不幸的是,不是在编译时,这是健壮的单元和集成测试非常有用的地方!现在,我正在寻找一个解决方案方向与自定义皮棉。在代码中,这似乎是最好的方法。不幸的是,在编译时不是这样,这是健壮的单元和集成测试有用的地方!现在,我正在寻找一个解决方案方向与自定义皮棉。在代码中,这似乎是最好的方法。