Kotlin 中的静态方法和变量?

2023-12-04

我希望能够将类实例保存到私有/公共静态变量中,但我不知道如何在 Kotlin 中执行此操作。

public class Foo {
    private static Foo instance;

    public Foo() {
        if (instance == null) {
            instance = this;
        }
    }
    
    public static Foo get() {
        return instance;
    }
}

Update:任何只需要所谓的“单例”(有时称为“服务”(Android 除外))的人(例如 OP),都应该简单地使用 Kotlin 的内置函数:

object Foo {
    // Done, this already does what OP needed,
    // because the boilerplate codes (like static field and constructor),
    // are taken care of by Kotlin.
}

(Like Roman rightly pointed out in the comment-section.)

之前的回答;如果您有(或计划有)多个static变量,然后继续阅读:

与 Java 静态字段最接近的是伴生对象。您可以在这里找到它们的文档参考:https://kotlinlang.org/docs/reference/object-declarations.html#companion-objects

您的 Kotlin 代码将如下所示:

class Foo {

    companion object {
        private lateinit var instance: Foo

        fun get(): Foo {
            return instance;
        }
    }

    init {
        if (instance == null) {
            instance = this
        }
    }

}

如果您希望将字段/方法作为静态公开给 Java 调用者,您可以应用@JvmStatic注解:

class Foo {

    companion object {
        private lateinit var instance: Foo

        @JvmStatic fun get(): Foo {
            return instance;
        }
    }

    init {
        if (instance == null) {
            instance = this
        }
    }

}

Note that @JvmStatic不需要任何导入(因为它是 Kotlin 的内置功能)。

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

Kotlin 中的静态方法和变量? 的相关文章

随机推荐

  • 在标签中绑定值

    是否可以将 JavaFX 滑块中的双值绑定到标签 我想要得到这样的东西 m maxSlider new Label Right Slider Val m slider getValue1 m maxSlider textProperty b
  • Google Cloud Messaging 上的最大主题数

    我想避免在应用程序级别管理设备令牌的复杂性 一名用户在 iOS 和 Android 上使用多台设备 多个用户订阅一个应用程序组 将 1 和 2 作为 GCM 的主题显然是一个简单的解决方案 这样我只需在发送通知时处理我的应用程序 UserI
  • 文件无效:错误:转储失败,因为找不到 AndroidManifest.xml

    当我尝试在 Android 市场上传我的 Android 应用程序时 我遇到了这个问题 我去过stackoverflow 的这个问答我相信导出时我的 AndroidManifest xml 位于 apk 文件中 并且该 xml 文件的所有内
  • AJAX上传显示多个文件上传中仅文件的进度

    请帮我更改下面的代码 我有多个从 HTML 上传的文件 ajax 将所有上传的文件发布到一个 php 脚本 该脚本向进度函数发送反馈 问题是所有三个进度条只监听一个文件上传
  • 如何在 JSF 中收集 List 的提交值?

    我有一颗豆子List
  • 是否可以实现 __super 宏?

    请告诉我是否有办法手动实现微软特定的 super宏观 class Base public void func something class Derived public Base public void func Base func ju
  • 带有 Java 线性和对数滤波器的 MFCC

    我正在用Java实现MFCC算法 Java 中有三角滤波器和 MFCC 的示例代码 链接在这里 MFCC Java但是我应该遵循用 Matlab 编写的代码 MFCC MATLAB 我的问题是在 Matlab 代码中 它讨论了线性和对数滤波
  • Java 8 流是原子的吗?

    我读了一些帖子 但我仍然很困惑 我知道并行流将以利用 CPU 的并行方式执行 我相信子作业将作为原子单元执行 对吗 但是常规的 Java 8 流呢 如果我执行下一行代码 users stream map user gt user getUs
  • 在表单提交的网址中间添加问号

    当我单击表单中的提交按钮时 它会添加一个 就在 之前 因此 app pageName 更改为 app pageName 这是正常行为吗 代码只是基本的东西 angular module myApp controller MyCtrl fun
  • 如何在进入 Java 应用程序时更改光标

    我遇到了一些我无法解决的问题 我正在编写一个带有接受拖放操作的 JList 的 Swing Java 应用程序 我想在将文件或文件夹从系统拖到 Java 应用程序上时更改光标 我自己找到了 不过还是感谢克林顿的回答 这是我用过的 首先创建
  • Socket tcp C# 如何清除输入缓冲区?

    我正在为 Windows Phone 编写一个应用程序 我需要与服务器通信并传输数据 SERVER是用C 编写的 我无法修改它 客户是我必须写的 服务器被设计为客户端连接到它并传输数据 连接对于所有传输都保持打开状态 通过用 C 编写代码
  • Infinispan相当于ehcache的copyOnRead和copyOnWrite

    我计划在现有的网络应用程序中实施缓存解决方案 没什么复杂的 基本上是一个支持溢出到磁盘和自动驱逐的并发映射 将来可能需要对缓存进行集群 但不是现在 我喜欢 ehcache 的 copyOnRead 和 copyOnWrite 功能 因为这意
  • 将 Crypto++ 对象保存到 std::vector

    我想将 Crypto 密钥保存到std vector
  • 如何使scrollviewer滚动像素而不是组件(wpf)

    我试图让我的滚动查看器完美地滚动 也就是说 我有一个滚动查看器 它包含一个 stackpanel 堆栈面板包含一个用户制作的用户控件 并且它们可以在运行时动态增加或减少 问题是 假设我的堆栈面板中只有 2 个用户控件 滚动查看器只有 2 级
  • 拖动对象时启用其他事件

    我正在开发一个控制台 我想将按钮拖动到网格中 要拖动按钮 我使用以下过程 Public drag As Boolean False Public ptX As Integer 0 Public ptY As Integer 0 Public
  • MongoDB:基于另一个集合从一个集合中进行条件选择

    我对 MongoDB 相当陌生 需要帮助根据另一个集合的数据对一个集合进行选择或某种左连接 我有两个集合 动物和膳食 我想获取在某个日期 假设是 20171001 之后上次注册膳食的动物 以确定该动物是否仍然活跃 collection an
  • 在 SQL Server 上的特定位置添加列?

    我想知道是否有办法在创建 SQL Server 表后将列添加到特定位置 Thanks 您可以在 Management Studio 中执行此操作 您可以通过在保存更改之前生成 SQL 脚本来检查完成此操作的方式 基本上是通过以下方式实现的
  • React JS - 如何在状态更新之前阻止渲染 [Hooks]

    我有一个从 API 获取数据以向用户显示一些详细信息的组件 const ItemDetail match gt const item setItem useState null useEffect gt const abort new Ab
  • 请求获取日历事件响应 404,前提是分配了权限并使用 Microsoft Graph API 获取了 accessToken

    我想构建一个具有获取其他人的日历事件功能的网络应用程序 我已经注册了该应用程序https apps dev microsoft com 并要求Calendars Read允许 我确信管理员已同意分配这些权限 我让他通过管理员同意页面来完成
  • Kotlin 中的静态方法和变量?

    我希望能够将类实例保存到私有 公共静态变量中 但我不知道如何在 Kotlin 中执行此操作 public class Foo private static Foo instance public Foo if instance null i