繁体   English   中英

执行 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 编译错误:

类 Book 的重复类定义无效:源 Book.groovy 包含类 Book 的至少两个定义。 其中一个类是使用 class 语句显式生成的类,另一个是根据文件名从脚本主体生成的类。 解决方案是更改文件名或更改类名。 在行:1,列:1

谁能解释一下这里发生了什么。

类别Book的无效重复类别定义:

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

  1. 类Book的类型定义
  2. 一个Groovy脚本,充当Book类型的客户端

Groovy将您的* .groovy文件视为脚本文件或类定义文件。 脚本文件是包含不在类定义内的代码的文件。 Groovy编译脚本文件时,它将隐式创建一个类来保存您的代码,并且为隐式类指定Book.groovy文件的名称。

然后,编译器将尝试为groovy脚本中定义的Book类创建一个附加类Book,由于此处实际上存在两个Book类定义,因此会出现错误。

比较: 此错误消息的带有代码示例的博客条目

在同一文件中定义Book类和客户端脚本的一种方法是将文件重命名,例如,重命名为BookApp.groovy。 注意:如果这样做,则只能从脚本文件中引用Book类型,即使groovy文件是在类路径上找到的,groovy也不会自动找到Book类型。

  1. Groovy控制台在内部缓冲项(源,类,变量),第二次单击“运行”可以与第一次不同,我同意。 几乎所有的解释器窗口(任何语言)都具有相似的行为
  2. 从File打开时,粘贴到没有文件的窗口时有细微的差别,因此可以具有Book或ConsoleScript1等名称(使用Groovy的“过程”使用具有隐藏的“对象”背景,从文件中隐藏/默认/生成的类名等)

通过临时编程(脚本模式)可以完全解决问题,但对于真正的OOP并非总是最好的。

PS。 代码也有很少的错误

当我遇到这个错误时,是因为我忘记了上面的“导入”这个词,而不是:

import io.beapi.api.service.PrincipleService

@RestController
class UserController {

我有这个:

io.beapi.api.service.PrincipleService

@RestController
class UserController {

缺少导入这个词给我造成了这个问题。 快速简单的修复(一旦我发现它是什么):)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM