2013-01-24 54 views
0

當運行下面的代碼時 我收到編譯錯誤: java:.. \ JavaClass.java:8:找不到符號 symbol:method add java.math.BigDecimal) location:class BigDecimalDelegated無法使用由java類中的groovy @Delegate生成的方法

它似乎是爲java編譯器創建的groovy類的存根(stub)不包含委託方法。

有什麼想法嗎?

考慮這個類:

class BigDecimalDelegated //groovy class 
{ 
    @Delegate BigDecimal delegated; 
    String data; 
} 

import org.junit.Test; 
import java.math.BigDecimal; 
public class JavaClass //java class 
{ 
    @Test 
    public void temp()throws Exception 
    { 
     new BigDecimalDelegated().add(BigDecimal.TEN); 
    } 
} 

回答

1

在IDEA的外部構建不支持此使用Groovy編譯,看到http://jira.codehaus.org/browse/GROOVY-4647

您可以使用@僅從Groovy代碼中刪除類,或者在Settings |中關閉外部構建編譯器使用舊的構建機制。

+0

提供的鏈接描述了另一個場景......在我的例子中,我不希望包含'add()'方法的類實現接口,我期望它有這樣的方法。並感謝:) – Yosefki

+0

這是同樣的問題:Groovy自己的存根生成器不考慮@Delegate –

0

你是如何運行/編譯代碼?

而且,我相信,你需要在構造函數來設置委派BigDecimalDelegated

class BigDecimalDelegated //groovy class 
{ 
    @Delegate BigDecimal delegated 
    String data 

    BigDecimalDelegated() { 
     delegated = 0.0G 
    } 
} 
+0

我使用IntelliJ 12編譯和運行代碼。我的構造函數並不重要,因爲我無法編譯代碼。我會爲NullPointerException感到高興 – Yosefki

+0

剛剛下載了IntelliJ 12,看看你的意思。發現一個錯誤http://youtrack.jetbrains.com/issue/IDEA-78555,但它說,它是固定的...奇怪...我很難過:-( –

+0

我在搜索答案時看到了這個錯誤。我不知道它是一樣的,因爲你說它應該是固定的。 – Yosefki