【问题标题】:enforce Resource Annotation for implementation of abstract val为实现抽象值强制执行资源注释
【发布时间】:2021-05-04 11:50:44
【问题描述】:

我有一个带有@StringRes 注释的抽象值的类:

@get: StringRes
abstract val foo : Int

不幸的是,当我像这样在实现中将非 StringRes 传递给该值时:

override val foo = 2

它仍然可以正常编译 - 但我希望它抛出编译时错误。

到目前为止,我发现的唯一解决方法是使用函数而不是 val - 所以这在编译时会失败:

@StringRes
abstract fun bar() : Int

override fun bar() = 1

但我想在这种情况下使用 val。任何人都知道如何使用 val 来做到这一点?

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    @get 是属性 getter,所以当你会使用 Kotlin 的属性 getter 时:

    var <propertyName>[: <PropertyType>] [= <property_initializer>]
        [<getter>]
        [<setter>] 
    

    像这样:

    abstract class Hello {
        @get :StringRes
        abstract val foo: Int
    }
    
    class World : Hello() {
        override val foo: Int
            get() = 123
    }
    

    会产生编译时错误。

    【讨论】:

    • 谢谢!这已经很好了 - 但是有了这个我仍然需要使用该函数来真正强制使用 StringRes - 所以我会稍等一下接受 - 也许有人有另一个真正强制执行它的解决方案。所以现在就投赞成票。
    猜你喜欢
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多