![](/img/trans.png)
[英]Elasticsearch - illegal_access_exception Error while executing groovy script
[英]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的代码清单包含两个部分:
Groovy将您的* .groovy文件视为脚本文件或类定义文件。 脚本文件是包含不在类定义内的代码的文件。 Groovy编译脚本文件时,它将隐式创建一个类来保存您的代码,并且为隐式类指定Book.groovy文件的名称。
然后,编译器将尝试为groovy脚本中定义的Book类创建一个附加类Book,由于此处实际上存在两个Book类定义,因此会出现错误。
在同一文件中定义Book类和客户端脚本的一种方法是将文件重命名,例如,重命名为BookApp.groovy。 注意:如果这样做,则只能从脚本文件中引用Book类型,即使groovy文件是在类路径上找到的,groovy也不会自动找到Book类型。
通过临时编程(脚本模式)可以完全解决问题,但对于真正的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.