Groovy——添加类似JS原型的方法



随着JS在Java上的未来不明朗(Java11上不赞成使用JS/Nashorn(,我一直在研究JS之外的选项,Groovy是一个主要的选项,因为它很受欢迎,而且与Java相似。

我目前使用JS/Nasahorn来处理游戏服务器的许多操作,虽然我可以看到很多操作都可以转换为Groovy,但我确实担心我很难弄清楚是否可能。

因此,在我的游戏服务器上,一直在添加新的可点击地图对象和npc(每个对象的总数都在数万(。为了处理这些点击操作,我有JS类来处理它们。

为了添加一个新的对象或npc操作,我有一组JS文件,它们将id拆分,这样它就不是一个巨大的文件。具体来说,我使用JS原型可以在不使用相同文件的情况下添加这些操作,并在运行时加载所有JS文件。

ObjectOption.prototype.object_0 = function(player, object) { }

然后,我可以通过执行实际JS类本身的函数

ObjectOption.prototype["object_" + object.getID()](player, object);

this["object_" + object.getID()](player, object);

我的问题是,任何这样的设置都可以用Groovy完成吗?还是这超出了Groovy的工作范围?

Groovy支持元编程,例如在运行时向现有类添加新方法。考虑以下示例:
class Person {
    void greetings(String name) {
        println "Greetings, $name!"
    }
}
Person.metaClass.hello = { String name -> println "Hello, $name!" }
def john = new Person()
john.greetings("Paul")
john.hello("Mary")

输出:

Greetings, Paul!
Hello, Mary!

在这个例子中,我们有一个简单的Person类,它有一个方法greetings()。我们能够通过访问Person.metaClass对象并添加方法hello作为接受String类型的单个参数name的闭包来添加新方法hello()

查看Groovy关于元编程的文档,你会发现很多例子。

最新更新