在 Kotlin 中,如何使属性只能由特定类型访问

2023-11-23

假设我有一个与此类似的 Kotlin 类:

class MyKotlinExample {
    val mMyString = MutableLiveData<String>()
}

MutableLiveData延伸LiveData但我不想暴露MutableLiveData到其他班级。他们应该只看到/访问LiveData<String>作为我的特别String

是否可能,和/或好/建议等?


您可以使用支持财产:

class MyKotlinExample {

    private val _myString = MutableLiveData<String>()
    val myString: LiveData<String>
      get() = _myString
}

您还可以为您的客户提供一个接口,该接口仅提供LiveData<String>。给定以下课程:

interface LiveData<T> {

    val value: T
}

data class MutableLiveData<T>(override var value: T) : LiveData<T>

创建以下接口/实现:

interface MyExampleInterface {

    val myString: LiveData<String>
}

class MyExampleClass : MyExampleInterface {

    override val myString: MutableLiveData<String> = MutableLiveData("")
}

在内部,您可以访问myString as MutableLiveData,并且您可以传递实例MyExampleClass as MyExampleInterface所以他们只能访问myString as LiveData<String>.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Kotlin 中,如何使属性只能由特定类型访问 的相关文章

随机推荐

  • 当我只知道字符偏移量时,如何创建范围对象?

    所以我有一个包含文本块的 div 之前用户已在该块中选择了一些文本 并且我从该选择中创建了一个范围对象 我存储了所选文本的起点和终点的偏移量 但在重新创建范围时遇到问题 以便我可以操纵它 quotables 是保存所有文本的 div 我不知
  • Spring Boot + Thymeleaf 找不到消息属性

    我正在尝试使用 Spring Boot 和 Thymeleaf 创建一个 Web 应用程序 但在让模板使用属性文件中定义的消息时遇到问题 它不是显示属性文件中定义的消息 而是显示 form welcome en GB 控制台没有记录任何错误
  • 如何知道 JavaScript 中的计时器是否被清除或超时?

    好吧 非常简单的问题 我正在参加 javascript 速成课程 如果我使用timer setTimeout 500 设置计时器 然后clearTimeout timer 要清除计时器 计时器的整数值不会改变 所以我的问题是如何知道计时器是
  • 初始化/重置结构为零/空

    struct x char a 10 char b 20 int i char c char d 10 我正在填充这个结构 然后使用这些值 在下一次迭代中 我想将所有字段重置为0 or null在我开始重用它之前 我怎样才能做到这一点 我可
  • Java:如何在 Swing 中进行双缓冲?

    EDIT TWO 为了防止尖锐的评论和一行回答没有抓住要点 IFF就像打电话一样简单设置双缓冲 真 那么我如何访问当前的离线缓冲区 以便我可以开始弄乱 BufferedImage 的底层像素数据缓冲区 我花时间写了一段正在运行的代码 看起来
  • 在不同情况下使用不同的 Hibernate 用户类型

    我使用 Hibernate JPA 作为我的 ORM 解决方案 我使用 HSQL 进行单元测试 使用 PostgreSQL 作为真正的数据库 我希望能够使用 Postgres 的原生UUID使用 Hibernate 键入 并在 HSQL 的
  • 在 pycharm/pydev 中调试 pytest 事后异常

    我想将 PyCharm 的内置 Pytest 运行器与调试器一起使用 而无需预先配置断点 问题是我的测试中的异常被 Pytest 捕获 因此 PyCharm 的事后调试器无法处理该异常 我知道使用断点是有效的 但我不想运行两次测试 在 Un
  • IOS5 setBrightness 不适用于 applicationWillResignActive

    I use UIScreen mainScreen setBrightness 在 sdk 5 0 中 更改我的应用程序中的系统背景光 以下步骤适用于我的应用程序 激活应用程序 将系统亮度设置为默认值 然后另存为sysBright 使用我的
  • 混合触发器与 WPF 触发器

    在我看来 Blend 风格和 Blend 风格之间有很大的区别 Trigger可以在 Interactivity 命名空间中找到 经典的Trigger可通过样式获得 ControlTemplates 等 在 WPF 中 我想这可能也适用于
  • 刷新缓冲区是什么意思?

    我正在学习C 我发现一些我无法理解的东西 可以显式刷新输出缓冲区以强制缓冲区 书面 默认情况下 读取cin脸红cout cout也被冲得通红 当程序正常结束时 因此 刷新缓冲区 例如输出缓冲区 是通过删除缓冲区中的所有内容来清除缓冲区 还是
  • 如何查看运行状态并停止耐用功能

    我想按需处理数百万条记录 处理时间大约需要 2 3 小时 我想要无服务器 这就是为什么尝试持久功能 第一次 我想检查一下 我可以运行持久函数多长时间 所以我创建了 3 个函数 用于启动 Orchestrator 功能的 Http 函数 Or
  • 在 Spark/Jetty-server 中重新加载静态文件

    我在这里描述了一个有点类似的问题 刷新 SparkJava 提供的静态文件 在我的应用程序中 用户可以将内容上传到一个文件夹 该文件夹也提供给用户 Spark staticFileLocation public 特征 据我所知 SparkJ
  • Github webhooks - 预推送挂钩

    我的要求是 每当开发人员推送到 github 时 在推送之前应该在 Jenkins 服务器上触发 CI 构建 如果构建失败 则应拒绝推送到 github 我需要为此编写挂钩 但我不想编写客户端挂钩 因为开发人员可以禁用它们 我想要服务器端
  • PHP - error_reporting 不起作用

    我的网络托管提供商不提供启用错误报告的选项 所以尝试使用 error reporting E ALL 但这也行不通 我尝试了以下脚本 如果我正确阅读了手册 那么这应该会生成错误通知 但这也行不通 我是否做错了什么 或者这是获得新的网络托管提
  • 在 Scala 中重载通用事件处理程序

    如果我定义以下通用事件处理程序 trait Handles E lt Event def handle event E 事件类型如下 trait Event class InventoryItemDeactivated val id UUI
  • 使用自定义标头获取 GET 请求?

    我正在尝试向 API 发送 GET 请求 但是当我在代码中添加自定义标头时 会发生一些奇怪的事情 当请求方法到达 Web 服务器时 某个地方会更改为 OPTIONS 但是当我在没有标头的情况下执行相同操作时 它将是 GET 类型 当我使用应
  • 使用 Pdf.js 突出显示 pdf 中的一个部分

    我目前在我的项目中使用 pdf js 来渲染 PDF 现在有一项棘手的任务 即在给定坐标的情况下突出显示 PDF 页面的一部分 Example 给定一个边界部分 例如 31 35 40 35 40 40 31 40 我应该用任何选择的原色来
  • Rails 3 和 Devise:注册后重定向到页面(可确认)

    我有一个带有 Devise 的 Rails 3 项目 启用了可确认功能 因此用户必须在注册后通过电子邮件确认其帐户 目前该项目将用户返回到登录页面并抛出 您已成功注册 通知 我想做的是将他们重定向到 谢谢 页面 并提供进一步的说明 检查您的
  • 您将如何将站点从 Prototype 切换到 jQuery

    我已经用 Prototype 编写了一个网站 但想切换到 jQuery 关于如何最好地进行转换有什么想法吗 就我个人而言 我喜欢分步进行 所以我会从使用两者开始 如下所示 jQuery noConflict Put all your cod
  • 在 Kotlin 中,如何使属性只能由特定类型访问

    假设我有一个与此类似的 Kotlin 类 class MyKotlinExample val mMyString MutableLiveData