簡體   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