我一直在使用带有 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/