如何使Groovy方法真正受到保护
试图在groovy中创建一个方法:
package com.foo class Foo { protected def getSomething(){ } } 这不起作用,因为默认情况下groovy几乎可以看到一切,所以我尝试使用@PackageScope package com.foo import groovy.transform.PackageScope @PacakgeScope class Foo { def getSomething(){ } } 这种工作,但只有当调用者使用@CompileStatic时…… package com.bar class Bar { @CompileStatic static void main(args){ def f = new Foo() println f.getSomething() } 以上抛出了IllegalAccessError,这很好,但没有@CompileStatic,就不会产生错误;不太好看.我无法强制用户静态编译,那么是否有任何替代方法来强制执行受保护的方法? 来自Groovy Documentation
好吧,如果受保护在Groovy中具有相同的含义但是没有强制执行,那是否会侵蚀它的含义?也许我错过了什么, 解决方法
简短回答:Groovy不强制执行可见性检查.
更长的答案 并不是Groovy没有设置相同的修饰符.从Java看,成员将像Java本身一样受到保护. Groovy不会在运行时(或编译时)执行可见性检查,甚至可能使用反射来强制访问. Groovy必须这样做,因为通常在Groovy中,访问该成员的类是运行时之一.这意味着Groovy必须在运行时模拟可见性检查,但为此需要某种“调用原点”,但由于元对象协议缺乏正确传输它的能力,因此Groovy并不总是可用. 使用@CompileStatic的东西是不同的.这里可以直接访问该成员.只有它应该已经失败编译,并且在运行时不会因IllegalAccessError而失败. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |