执行 groovy 脚本时出错
Error while executing groovy script
代码如下:
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个编译错误:
Invalid duplicate class definition of class Book : The source
Book.groovy contains at least two definitions of the class Book. One
of the classes is an explicit generated class using the class
statement, the other is a class generated from the script body based
on the file name. Solutions are to change the file name or to change
the class name. at line: 1, column: 1
任何人都可以向我解释这里发生了什么。
- Groovy 控制台在内部缓冲项目(来源、classes、变量),第二次单击 "run" 可能与第一次单击不同,我同意。几乎所有解释器 windows(任何语言)都有类似的行为
- 从文件打开时有微妙的差异,粘贴到 window 没有文件,因此可以有名称 Book 或 ConsoleScript1 等("procedural" 使用 Groovy 已隐藏 "object" 背景,hidden/default/generated class 来自文件等的名称)
这可以通过临时编程(脚本模式)提供帮助,但并不总是真正 OOP 的最佳选择。
PS。代码也有一些错误
class 书的无效重复 class 定义:
OP的代码清单包含两部分:
- class书的类型定义
- 一个groovy脚本,充当书籍类型的客户端
Groovy 将您的 *.groovy 文件视为脚本文件或 class 定义文件。脚本文件是包含不在 class 定义内的代码的文件。当 Groovy 编译脚本文件时,它会隐式创建一个 class 来保存您的代码,隐式 class 被赋予 Book.groovy 文件的名称。
然后,编译器将尝试为 groovy 脚本中定义的 Book class 创建一个额外的 class Book,这里会出现错误,因为现在实际上有两个书 class 定义。
比较:Blog entry with code sample for this error message
在同一个文件中定义 Book class 和客户端脚本的一种方法是重命名文件,例如至 BookApp.groovy。警告:如果你这样做,Book 类型只能从脚本文件中引用,Book 类型不会被 groovy 自动找到,即使 *.groovy 文件是在class路径。
当我 运行 进入这个错误时,那是因为我忘记了正上方的单词 'import' 而不是 :
import io.beapi.api.service.PrincipleService
@RestController
class UserController {
我有这个:
io.beapi.api.service.PrincipleService
@RestController
class UserController {
缺少导入这个词导致了我这个问题。快速简单的修复(一旦我明白了它是什么):)
代码如下:
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个编译错误:
Invalid duplicate class definition of class Book : The source Book.groovy contains at least two definitions of the class Book. One of the classes is an explicit generated class using the class statement, the other is a class generated from the script body based on the file name. Solutions are to change the file name or to change the class name. at line: 1, column: 1
任何人都可以向我解释这里发生了什么。
- Groovy 控制台在内部缓冲项目(来源、classes、变量),第二次单击 "run" 可能与第一次单击不同,我同意。几乎所有解释器 windows(任何语言)都有类似的行为
- 从文件打开时有微妙的差异,粘贴到 window 没有文件,因此可以有名称 Book 或 ConsoleScript1 等("procedural" 使用 Groovy 已隐藏 "object" 背景,hidden/default/generated class 来自文件等的名称)
这可以通过临时编程(脚本模式)提供帮助,但并不总是真正 OOP 的最佳选择。
PS。代码也有一些错误
class 书的无效重复 class 定义:
OP的代码清单包含两部分:
- class书的类型定义
- 一个groovy脚本,充当书籍类型的客户端
Groovy 将您的 *.groovy 文件视为脚本文件或 class 定义文件。脚本文件是包含不在 class 定义内的代码的文件。当 Groovy 编译脚本文件时,它会隐式创建一个 class 来保存您的代码,隐式 class 被赋予 Book.groovy 文件的名称。
然后,编译器将尝试为 groovy 脚本中定义的 Book class 创建一个额外的 class Book,这里会出现错误,因为现在实际上有两个书 class 定义。
比较:Blog entry with code sample for this error message
在同一个文件中定义 Book class 和客户端脚本的一种方法是重命名文件,例如至 BookApp.groovy。警告:如果你这样做,Book 类型只能从脚本文件中引用,Book 类型不会被 groovy 自动找到,即使 *.groovy 文件是在class路径。
当我 运行 进入这个错误时,那是因为我忘记了正上方的单词 'import' 而不是 :
import io.beapi.api.service.PrincipleService
@RestController
class UserController {
我有这个:
io.beapi.api.service.PrincipleService
@RestController
class UserController {
缺少导入这个词导致了我这个问题。快速简单的修复(一旦我明白了它是什么):)