代码如下:
class Book
{
private String title
Book (String theTitle)
{
title=theTitle
}
String getTitle()
{
return title
}
}
Book gina=new Book('Groovy in Action')
assert gina.getTitle()=='Groovy in Action'
assert getTitleBackwards(gina)=='noitcA ni yvoorG'
String getTitleBackwards(Book)
{
title=book.getTitle()
return title.reverse()
}
当我使用Ctrl + R执行时,我收到以下编译错误。
1编译错误:
类Book的重复类定义无效:源 Book.groovy包含至少两个类Book的定义。一 这些类是使用该类的显式生成类 声明,另一个是从脚本体生成的类 在文件名上。解决方案是更改文件名或更改 班级名称。 at line:1,column:1
有人可以解释一下这里发生了什么。
答案 0 :(得分:5)
类Book的重复类定义无效:
OP的代码清单包含两部分:
Groovy将您的* .groovy文件视为脚本文件或类定义文件。脚本文件是包含不在类定义中的代码的文件。当Groovy编译脚本文件时,它会隐式创建一个类来保存您的代码,而隐式类将被赋予Book.groovy文件的名称。
然后,编译器将尝试为groovy脚本中定义的Book类创建一个额外的类Book,这里发生错误,因为现在实际上有两个Book类定义。
比较:Blog entry with code sample for this error message
在同一文件中定义Book类和客户端脚本的方法是重命名文件,例如:到BookApp.groovy。警告:如果你这样做,Book类型只能在脚本文件中引用,即使在类路径上找到* .groovy文件,groovy也不会自动找到Book类型。
答案 1 :(得分:0)
这可以通过临时编程(脚本模式)来完成,但并不总是最适合真正的OOP。
PS。代码也有很少的错误