Kotlin 对象作为 spigot 的注入(inject)点

标签 kotlin minecraft bukkit

我一直在使用带有 Bukkit 框架的 Kotlin,到目前为止它一直很棒。我有一个主要问题。 Bukkit 要求主插件类是一个类,以便 spigot 可以创建它的实例。

我正在使用 Bukkit 框架为 Kotlin 编写一个库,因为它最初是用 Java 编写的。我遇到的主要问题是几乎所有方法都需要 JavaPlugin 类的实例,但我不想使用依赖注入(inject)。拥有一个对象或对 JavaPlugin 实例的静态访问将解决这个问题。

有什么方法可以创建某种包装器或类似性质的东西来将类的行为委托(delegate)给一个对象?

最佳答案

我不相信有办法用一个对象来做到这一点,但是你可以通过使用一个全局变量来伪造一个对象:

val Injection: InjectionClass
    get() = injectionInstance
private lateinit var injectionInstance: InjectionClass

class InjectionClass {
    init { injectionInstance = this }

    var someVar = 0
}

然后在另一个文件中你可以使用 Injection.someVar就像如果 Injection是一个对象。这样做的一个缺点是 IntelliJ IDEA 的语法高亮显示 Injection作为紫色斜体而不是白色,但除此之外必须使用InjectionClass如果您需要将其指定为一种类型,它应该可以完美运行

关于Kotlin 对象作为 spigot 的注入(inject)点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49452649/

相关文章:

java - 如何在 Android 中通过 MediaStore API 检索和打开保存到下载的 PDF 文件?

kotlin - 使用Kotlin的FastUtil IntList时避免过时警告

Android Compose 显示和隐藏键盘

3d - 简单的程序 3D 洞穴生成?

java - Minecraft bukkit 插件右键单击项目

reflection - kotlin 反射检查可空类型

java - 修改玩家列表计分板

java - Bukkit - 为什么我的 Multimap 没有被通过?

java - Bukkit 从库存中移除元素

java - 为什么这个MySQL不能正确执行?