![](/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.