kotlin 如何在伴随对象中使用@Value变量?

xzv2uavs  于 2023-04-12  发布在  Kotlin
关注(0)|答案(2)|浏览(190)
class EnumUtils(
        @Value("\${open-date}")
        lateinit var openDateYmd: String
) {

    companion object{

        fun getStatus(orderDate: LocalDateTime): Status {
            val openDateLocalDateTime = parseToLocalDateTime(**openDateYmd**)
            return when {
                orderDate.isBefore(openDateLocalDateTime) -> Status.VALUE_1
                else -> Status.VALUE_1
            }
        }
    }
}

这是我的代码。我想在同伴对象中使用openDateYmd变量。(具体来说,我想在parseToLocalDateTime函数中使用它。)
openDateYmd是yaml的变量之一。
如何使用它?

7dl7o3gd

7dl7o3gd1#

(我假设你正在使用Spring,因为你提到了YAML和@Value
如何使用它?
不,你不能(或至少不容易 *)-错误的范围。
如果你熟悉Java,同伴对象就像一个static@Value注解了一个类示例变量。
您可以将class EnumUtils更改为单例类object EnumUtils,这是您通常为Utility类所做的,在那里您不需要有特定的示例,但这 * 不会解决您的问题 *,因为Spring希望为您创建示例(即使它本质上创建了一个单例)。

  • 一种方法是将值传递给同伴对象中的变量,但现在您正在破坏模型,并且如果同伴对象尚未“示例化”,则可能会遇到问题

看起来你需要参数化你的工具。你需要避免同伴对象或对象类,坚持使用Spring管理的常规类,然后将其注入到调用站点。

bxpogfeg

bxpogfeg2#

为了在Android类的伴随对象中使用带@Value注解的变量,您需要确保将变量声明为包含类的属性,而不是伴随对象本身。
下面是一个示例,说明如何在伴随对象中使用带@Value注解的变量:

class MyActivity : AppCompatActivity() {

    @Value("\${my_value}")
    lateinit var myValue: String

    companion object {
        fun doSomethingStatic() {
            // Access the myValue property through the containing class
            val myValue = MyActivity().myValue
            // ...
        }
    }
}

在本例中,myValue被声明为MyActivity的属性,并使用@Value进行注解。lateinit关键字用于指示该属性将在稍后进行初始化。
doSomethingStatic函数在MyActivity的伴随对象中声明,并且可以通过包含类的示例访问myValue属性。请注意,您不能直接从伴随对象访问myValue属性,因为它不是静态属性。

相关问题