我在问"为什么Groovy可以这样做?"对于以下两个代码块。也许我应该创建两个单独的问题,但这些问题似乎密切相关。
首先,
class Dog
{
public speak() {
return "Bark"
}
}
请注意speak()
没有返回类型,我没有说def
。然而,代码就像我包含def
一样。
第二,
@interface MyAnnotation {
}
interface Canine{
@MyAnnotation
speak()
}
注意speak()
方法如何没有返回类型,但是当我在方法上添加注释时它会起作用。
为什么这两个代码块都能正常工作(即使用它们时没有错误)?如果我把public
放在它之前,为什么第一个工作,如果我在其上放一个注释,为什么第二个工作?这记录在哪里?
编辑:
这是一个可运行的脚本,可以演示两种奇怪的内容:
@interface MyAnnotation { }
interface Canine{
@MyAnnotation
speak()
}
class Dog implements Canine
{
public speak() {
return "Bark"
}
}
Dog fido = new Dog()
println fido.speak()
答案 0 :(得分:1)
Groovy旨在灵活和宽容。只要您使用def,返回类型,公共或注释,并且最后有()
(并且名称与封闭类不匹配),解释器会发现它是一种方法声明,它让你做到这一点。如果你不关心返回类型足以表明它,Groovy也没关系它。这就是设计理念。
在我找到的任何地方都没有记录此语法。我猜这表明这种语法可能会发生变化。如果仅为了清楚起见,我会毫不犹豫地依赖于此并坚持使用def或返回类型。