当前位置: 首页 > 知识库问答 >
问题:

Kotlin:属性设置器的文档

李和昶
2023-03-14
class SessionWrapper {

    /**
     * The time in milliseconds after which the session will expire.
     */
    var expiryTime = DEFAULT_EXPIRY_TIME
        get() {
            mainThreadCheck()
            return field
        }
        set(value) {
            mainThreadCheck()
            field = value
            updateExpiry(value) <<< THIS ONE
        }

    ...
}
    /**
     * The time in milliseconds after which the session will expire.
     *
     * Updating the expiry time after the session is started does x,
     * the listeners will receive y.
     *
     * Writing comments is fun, when the tools work.
     */
     var expiryTime = DEFAULT_EXPIRY_TIME

但是对于Java项目,setexpirytime(long)getexpirytime()都会出现上面的文档,因为在getter中有setter JavaDoc,在setter中有getter JavaDoc。

尝试用Kotlin将两个访问器的文档分开,方法如下:

class SomeClass{

    var expiryTime = DEFAULT_EXPIRY_TIME
        /**
         * The time in milliseconds after which the session will expire.
         */
        get() {
            mainThreadCheck()
            return field
        }
        /**
         * Updating the expiry time after the session is started does x,
         * the listeners will receive y.
         *
         * Writing comments is fun, when the tools work.
         */
        set(value) {
            mainThreadCheck()
            field = value
            updateExpiry(value)
        }

    ...
}

对于Kotlin和Java代码,IDE中都没有显示JavaDoc。

会很感激任何想法。

共有1个答案

衡翰翮
2023-03-14

我认为您应该重新评估您的类设计,而不是试图在文档中解释特殊行为。这通常是代码气味的标志,也可能是可测试性差的标志。

您应该记住updateexpiry()的特殊行为来建模该类。如果这个方面值得对客户机透明,那么它可能应该是某种接口或协议步骤的一部分。

在不了解软件其余部分的详细信息的情况下,我所能想到的最好办法就是将setter设置为私有,并添加一个单独的函数来更新expirytime:

/** Explain property */
var expiryTime = DEFAULT_EXPIRY_TIME
    get() {
        mainThreadCheck()
        return field
    }
    private set(value) {
        mainThreadCheck()
        field = value
    }

/** Explain update behavior constraints */
fun updateExpiryTime(value: Any) {
  expiryTime = value
  updateExpiry(value)
}
 类似资料:
  • 我在本地有属性文件,我通过下面的方法在代码中读取字符串路径OfFile=System.getProperties("arg.get.prop"); 如何设置此系统属性以获取我的属性文件的自由路径server.xml

  • 了解在 Dreamweaver 中如何使用文本属性检查器应用 HTML 格式或 CSS 格式。 可以使用文本属性检查器应用 HTML 格式或层叠样式表 (CSS) 格式。应用 HTML 格式时,Dreamweaver 会将属性添加到页面正文的 HTML 代码中。应用 CSS 格式时,Dreamweaver 会将属性写入文档头或单独的样式表中。 注意:在创建 CSS 内联样式时,Dreamweave

  • 本文向大家介绍iOS 设置属性文本,包括了iOS 设置属性文本的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 问题 在你解析一个Document之后可能想修改其中的某些属性值,然后再保存到磁盘或都输出到前台页面。 方法 可以使用属性设置方法Element.attr(String key, String value), 和Elements.attr(String key, String value). 假如你需要修改一个元素的class 属性,可以使用Element.addClass(String clas

  • 问题内容: 我希望仅当登录用户具有所需的权限级别时,其他功能才可执行。 为了使我的生活更加复杂,我想使用装饰器。下面,我尝试在“装饰”功能上设置属性-如下所示。 但是当我这样做时: 我得到一个错误 我想念什么? 问题答案: 您正在检查内部(包装)函数上的属性,但在原始(包装)函数上进行了设置。但是,您 根本 需要包装函数: 你的装饰需要返回 的东西 那将取代原有的功能。原始函数本身(添加了属性)可

  • 问题内容: 这段代码返回一个错误:AttributeError:无法设置属性这真的很遗憾,因为我想使用属性而不是调用方法。有谁知道为什么这个简单的例子不起作用? 问题答案: 这是你想要的吗? 取自http://docs.python.org/library/functions.html#property。