2017-04-02 114 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