2017-04-02 118 views
0

我已經添加了這個類:龍目島@ExtensionMethod:無法解析方法

public class StringExtensions { 
    public static String makeMusical(String in) { 
    return "1"; 
    } 
} 

@ExtensionMethod({StringExtensions.class}) 
public class App { 
    public static void main(String[] args) { 
    String a = "A".makeMusical(); //compiles but ide shows:"cannot resolve method makeMusical" 
    } 
} 

而是試圖用它在一個字符串時,我得到:

「無法解析方法makeMusical」

(該解決方案構建並運行在IntelliJ上,但我沒有智能感知/ ide無法識別該方法)

我已設置:

  • 啓用註釋處理。
+0

您可能想分享調用此方法的代碼。 另外 - 它與龍目島有什麼關係?看起來'makeMusical'是你的代碼,而不是Lombok的。 – SHG

+0

我已更新問題 – roman

+0

Lombok本身在Eclipse和Netbeans中工作,而在IntelliJ中,您需要插件。根據https://github.com/mplushnikov/lombok-intellij-plugin/issues/21,這仍然是一個懸而未決的問題。 – maaartinus

回答

0

仍然是實驗性功能 - 可能原因是here

創建的方法makeMusical是靜態的,所以我猜想當您試圖在"A".之後嘗試智能感知時,IDE會嘗試僅使用非靜態方法自動完成。

希望當鏈接中的問題得到解決時,IDE插件將相應地發揮作用。

順便說一句--Eclipse intellisense行爲類似,但它並沒有顯示任何錯誤。

+0

您的第二段令人困惑,因爲所有擴展方法都必須是「靜態」,只是呼叫站點看起來像一個非靜態呼叫。 – maaartinus

+0

對不起,我不理解你的評論。你對我的第二段感到困惑嗎? – SHG

+0

IDE應該顯示方法,因爲調用看起來像「A」.makeMusical()',即像非靜態方法(並且不像例如'「A」.valueOf('x')',這更好寫成'String.valueOf('x')')。在Eclipse中,它可以工作。在IntelliJ中,它並沒有和AFAIK唯一的原因是插件根本不理解'@ ExtensionMethod'。 – maaartinus