加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

groovy – ClassNotFound被认为很奇怪

发布时间:2020-12-14 16:22:54 所属栏目:大数据 来源:网络整理
导读:ClassNotFound(是的,我知道,有很多关于这个例外的帖子;我在这里和其他地方搜索过,找不到解释) 为什么Class.forName会失败? groovy class Foo { groovy } groovy def f = new Foo() groovy def cname = f.getClass().getName() groovy def p = f.getClass().
ClassNotFound(是的,我知道,有很多关于这个例外的帖子;我在这里和其他地方搜索过,找不到解释)

为什么Class.forName会失败?

groovy> class Foo { 
groovy> } 
groovy> def f = new Foo() 
groovy> def cname = f.getClass().getName() 
groovy> def p = f.getClass().getPackage() 
groovy> def l = f.getClass().getClassLoader() 
groovy> println "Foo class name: $cname" 
groovy> println "Foo package: $p" 
groovy> println "Foo class loader: ${f.getClass().getClassLoader().toString()}" 
groovy> println "Current class loader: ${this.getClass().getClassLoader().toString()}" 
groovy> try { 
groovy>     Class.forName(cname) 
groovy> } catch (Exception e) { 
groovy>     println e 
groovy> } 
groovy> l.findClass("Foo") 



Foo class name: Foo
Foo package: null
Foo class loader: groovy.lang.GroovyClassLoader$InnerLoader@2d275595
Current class loader: groovy.lang.GroovyClassLoader$InnerLoader@2d275595
java.lang.ClassNotFoundException: Foo
Exception thrown
Oct 16,2012 4:43:28 PM org.codehaus.groovy.runtime.StackTraceUtils sanitize
WARNING: Sanitizing stacktrace:
java.lang.ClassNotFoundException: Foo

谢谢!

解决方法

这是由于ClassLoader. shell中的ClassLoader(即您在shell中定义的类)与运行shell的ClassLoader(运行shell所需的jar)不同.这就是为什么命令Class.forName(“Foo”,true,this.class.classLoader)有效,因为你在shell中指定了ClassLoader

尝试

def shell=new GroovyShell()

def f=shell.evaluate("class Foo{Foo(){println this.class.classLoader}};def f=new Foo()")

println shell.class.classLoader
shell.evaluate("println this.class.classLoader")

println "-----------"
println Class.forName("Foo",f.class.classLoader)
println Class.forName("Foo",this.class.classLoader)

你会看到第一个Class.forName工作,而不是第二个.运行脚本是类似的,因为它将创建一个不共享shell的ClassLoader的脚本类

在脚本的上下文中,执行Class.forName将不会使用与此相同的内容.

不确定它是否足够清晰:(

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读