首页 > 解决方案 > 将值传递给函数而不直接作为参数传递的好方法

问题描述

我有 Spring 管理的 kotlin 类(它是一个@Service)。它调用非 Spring 管理的对象上的函数。如何将值传递给该函数?

我不想只传递参数给它,因为这个函数是多态的,我只希望这个函数的一个版本使用这个值,这个函数的其他版本不需要这个值。

我通过使用 @Value 注释从属性文件中获取此值。

代码示例:

@Service
class ServiceClass(
    private val transactionTemplate: TransactionTemplate,
    @Value("\${some-value}")
    private val someValue: String
) {
    private fun callingPolymorphicFunction(polymorphicObjects: List<PolymorphicObjects>) {
        transactionTemplate.execute {
            polymorphicObjects.forEach {
                it.process()
            }
        }
    }
}
sealed class PolymorphicObjects {
    abstract fun process(): AnotherObject?
}

data class PolyMorphicObjectsInheriting1(
    //some fields
) : PolymorphicObjects() {
    override fun process(): AnotherObject? {
        //some code #1
    }
}
 
data class PolyMorphicObjectsInheriting2(
    //some other fields
) : PolymorphicObjects() {
    override fun process(): AnotherObject? {
        //some code #2
    }
}
 
data class PolyMorphicObjectsInheriting3(
    //some other fields yet again
) : PolymorphicObjects() {
    override fun process(): AnotherObject? {
        //some code #3
    }
}

我只希望 PolyMorphicObjectsInheriting1::process 能够访问这个值而不是其他值,最简单的方法是什么?

tldr:如何在不添加其他参数的情况下将值传递给函数?

标签: springspring-bootkotlin

解决方案


听起来像是设计问题,但您可以在 ServiceClass 中创建公共静态变量并在 @PostConstruct 注释方法中将其设置为等于 someValue 并在 prcoess(..) 方法中调用


推荐阅读