【发布时间】:2015-03-05 16:28:57
【问题描述】:
我在问“为什么在 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()
【问题讨论】:
-
@Opal:不,他们问的是完全不同的问题。如果您仔细阅读,您会发现该问题的 OP 使用
def作为返回类型。在我的示例中,根本没有返回类型, 因此我的问题是为什么这段代码编译成功。 -
能否提供一个可运行的示例来说明问题?
-
@Opal:添加到问题中。谢谢。
-
@olyv:也许我需要用不同的措辞来表达我的问题......但你真的应该能够看到这些问题与我的不同。您的第一个链接是关于可选的返回声明,这不是我要问的。根据您的第二个链接,如果您向上滚动,您会看到 Opal 已经链接到该链接,我指出这是一个完全不同的问题。我继续将我的问题标题更改为“为什么 Groovy 有时不需要方法的显式返回类型?”以防止混淆。
标签: groovy