开发者社区 问答 正文

null?报错

项目是用的JFinal开发的,在项目运行之后,在classes目录里,多了一些带有$字符的文件,这是因为啥?其他的项目好像都没有

在这样的情况下,在本地跑和tomcat跑是没问题的,但是在weblogic里启动服务器的时候就报错了,提示缺少xxxxx$2类,事实上这个类在目录下是没有的

 

不太明白编译之后,为何会生成带有$的class

 

@JFinal

展开
收起
爱吃鱼的程序员 2020-06-22 15:15:38 392 分享 版权
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
    @缪斯的情人貌似内部类或者没有用public修饰的类会在编译成class之后带$+1正解类是我自己加的,而且也是用的public的修饰符

    现在生成的情况是:

    xxxx.class  xxxx$1.class 有的有xxxx$2.class

    把你自己的那个类贴出来看看 publicclassLoginLogService{privatestaticfinalStringCACHE_NAME="LoginlogService";privatestaticLoginLogServiceservice;privateLoginLogService(){}publicstaticsynchronizedLoginLogServiceme(){if(service==null){service=newLoginLogService();}returnservice;}}

    其他的就只有些sql查询而已

     

     

     

    回复 @Singer:有,其他的就是普通的sql操作你这个里面java文件里面就只有这些代码没有其他的了?如果没有的话是绝对不会产生$的class文件的。 @Singer刚做了个试验,增加了个新类按上面写,不会有生成,但是增加了其他的增删改查的操作就生成了?这是为何 publicclassLoginLogService{privatestaticfinalStringCACHE_NAME="LoginlogService";privatestaticLoginLogServiceservice;privateLoginLogService(){}publicstaticsynchronizedLoginLogServiceme(){if(service==null){service=newLoginLogService();}returnservice;}classA{}}这样的有内部类的情况的时候就会有$出现如果用$1$2用数字代表的话应该是匿名内部类

    引用来自“Singer”的答案

    publicclassLoginLogService{privatestaticfinalStringCACHE_NAME="LoginlogService";privatestaticLoginLogServiceservice;privateLoginLogService(){}publicstaticsynchronizedLoginLogServiceme(){if(service==null){service=newLoginLogService();}returnservice;}classA{}}这样的有内部类的情况的时候就会有$出现回复 @子寒:检查下代码有没有使用回调或者事件监听,猜测是使用了匿名内部类即使去掉classA一样的会有的

    1.没有声名作用域,参照jfinal代码中com.jfinal.core.Config,编译出来为com.jfinal.core.Config$1

    2.有内部类或者匿名内部类。后面的1,2,3指的是匿名内部类的个数,对应着编译出几个class文件。

    第一种情况可以排除,我刚试验过了第二种情况,什么才叫内部类,像他们说的CLASSA这个我已经删除了,但是一样的有
    2020-06-23 11:57:23
    赞同 展开评论
问答分类:
问答地址: