我有以下课程:
class GroovyTest {
static class MyClass {
}
static main(def s) {
MyClass.print("hello")
}
}
打印:
hello
为什么我需要一个在每个类中打印字符串的打印方法?
此外,如果我这样做:
MyClass.methods.each {println it}
它为我提供了MyClass
拥有且print
不在列表中的方法列表。
答案 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,它们分别具有print
和echo
。只有对象和方法。没有内置println
你可以随便打电话。这是添加global-ish println
函数的方法之一。
似乎它是Ruby中的内置函数,也是puts
。