如何使Groovy方法真正受到保护

如何使Groovy方法真正受到保护,第1张

概述试图在groovy中创建一个方法: package com.fooclass Foo { protected def getSomething(){ }} 这不起作用,因为默认情况下groovy几乎可以看到一切,所以我尝试使用@PackageScope package com.fooimport groovy.transform.PackageScope @Pacak 试图在groovy中创建一个方法:

package com.fooclass Foo {  protected def getSomething(){  }}

这不起作用,因为默认情况下groovy几乎可以看到一切,所以我尝试使用@PackageScope

package com.fooimport groovy.transform.PackageScope    @PacakgeScopeclass 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

Protected in Groovy has the same meaning as protected in Java,i.e.
you can have frIEnds in the same package and derived classes can also
see protected members.

好吧,如果受保护在Groovy中具有相同的含义但是没有强制执行,那是否会侵蚀它的含义?也许我错过了什么,

解决方法 简短回答:Groovy不强制执行可见性检查.

更长的答案
受保护在Java中有意义,你肯定知道.我只为感兴趣的读者提及它:http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.6.2

并不是Groovy没有设置相同的修饰符.从Java看,成员将像Java本身一样受到保护. Groovy不会在运行时(或编译时)执行可见性检查,甚至可能使用反射来强制访问. Groovy必须这样做,因为通常在Groovy中,访问该成员的类是运行时之一.这意味着Groovy必须在运行时模拟可见性检查,但为此需要某种“调用原点”,但由于元对象协议缺乏正确传输它的能力,因此Groovy并不总是可用.

使用@CompileStatic的东西是不同的.这里可以直接访问该成员.只有它应该已经失败编译,并且在运行时不会因IllegalAccessError而失败.

总结

以上是内存溢出为你收集整理的如何使Groovy方法真正受到保护全部内容,希望文章能够帮你解决如何使Groovy方法真正受到保护所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1234940.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存