执行 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

任何人都可以向我解释这里发生了什么。

  1. Groovy 控制台在内部缓冲项目(来源、classes、变量),第二次单击 "run" 可能与第一次单击不同,我同意。几乎所有解释器 windows(任何语言)都有类似的行为
  2. 从文件打开时有微妙的差异,粘贴到 window 没有文件,因此可以有名称 Book 或 ConsoleScript1 等("procedural" 使用 Groovy 已隐藏 "object" 背景,hidden/default/generated class 来自文件等的名称)

这可以通过临时编程(脚本模式)提供帮助,但并不总是真正 OOP 的最佳选择。

PS。代码也有一些错误

class 书的无效重复 class 定义:

OP的代码清单包含两部分:

  1. class书的类型定义
  2. 一个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 {

缺少导入这个词导致了我这个问题。快速简单的修复(一旦我明白了它是什么):)