我已经阅读了"Groovy 2.0中的新功能",我对何时使用@CompileStatic感到有些困惑.文章提到@CompileStatic
为没有能够利用Java7的调用动态部分的开发人员添加了注释.
因此,如果无法在JDK 7上运行,那么寻求性能改进的开发人员不会看到Groovy 2.0中的太多变化.幸运的是,Groovy开发团队认为这些开发人员可以通过允许类型检查来获得有趣的性能提升等优势代码要静态编译.
我的问题是,如果我使用JDK 7并按照说明添加--indy
标志,我是否需要添加@CompileStatic
才能看到性能提升? 这个博客暗示我会,但我不确定他是否正确编译,因为他在Eclipse中做到了.
更新:以下是运行Fibonacci代码的不同排列时的统计信息.
> groovy --indy FibBoth.groovy
..........Fib (non-static indy): 1994.465
..........Fib (static indy): 529.197
> groovy FibBoth.groovy
..........Fib (non-static): 1212.788
..........Fib (static): 525.671
Run Code Online (Sandbox Code Playgroud)
注意:现在我明白这些功能是独立的,这个问题似乎有点混乱.由于问题的基础是围绕着使我认为两个特征相关的注释的混淆,我认为不改变问题措辞并允许解释差异的接受答案是有道理的.
我刚刚将我的一个Grails应用程序升级到2.2.0,它使用的是Groovy 2.0,现在我收到了这个编译错误:
混合使用相同名称的私有和公共/受保护方法会导致多方法被禁用,并且禁止避免出现令人惊讶的行为.重命名私有方法将解决问题.
基于以下代码:
def getRootDomain(key) { }
private getRootDomain() { }
Run Code Online (Sandbox Code Playgroud)
这是一个简单的修复,但我真的很想了解为什么更好.谁可以给我解释一下这个?
我正在获取groovyx.net.http.HttpResponseException: Not Found
并希望查看来自的日志HTTPBuilder
。我正在将Groovy 2.1.9与一起使用groovyConsole
。
因此,我检查了该博客文章,其中提到有关添加log4j.xml
到的信息groovy.home/conf/
。我做到了,这是我的文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} %-5p %c{1} - %m%n" />
</layout>
</appender>
<category name="groovyx.net.http">
<priority value="DEBUG" />
</category>
<!-- Use DEBUG to see basic request/response info;
Use TRACE to see headers for HttpURLClient. -->
<category name="groovyx.net.http.HttpURLClient">
<priority value="INFO" />
</category>
<category name="org.apache.http"> …
Run Code Online (Sandbox Code Playgroud)