为什么groovy为每个类添加print方法?

时间:2014-06-05 07:01:24

标签: java groovy

我有以下课程:

class GroovyTest {
    static class MyClass {
    }

    static main(def s) {
        MyClass.print("hello")
    }
}

打印:

hello

为什么我需要一个在每个类中打印字符串的打印方法?

此外,如果我这样做:

MyClass.methods.each {println it}

它为我提供了MyClass拥有且print不在列表中的方法列表。

2 个答案:

答案 0 :(得分:2)

Groovy在运行时向类添加了许多方法。其中一种方法是添加到java.lang.Object的print方法。见https://github.com/groovy/groovy-core/blob/194b29270d418b1b8642f5746a49873018f115c1/src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java#L531。 DefaultGroovyMethods的工作方式是,该类中方法定义的第一个参数表示该方法将被添加到的类型,如此......

public static someMethod(SomeType o, SomeOtherType arg) {
    // ...
}

这意味着名为someMethod的方法将添加到SomeType,并且该方法接受SomeOtherType类型的参数。

我希望有所帮助。

答案 1 :(得分:0)

Groovy为Object类添加了许多有用的方法,这意味着它们可用于任何对象。甚至是类,它们本身就是对象。这就是为什么你可以做[].println()

这是使用策略,因为Groovy和Java都有内置函数的概念,如Python或PHP,它们分别具有printecho。只有对象和方法。没有内置println你可以随便打电话。这是添加global-ish println函数的方法之一。

似乎它是Ruby中的内置函数,也是puts