V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Event
V2EX  ›  Java

商业程序开发遇到一个很奇葩的问题

  •  
  •   Event · 2018-11-18 20:24:19 +08:00 · 2270 次点击
    这是一个创建于 2195 天前的主题,其中的信息可能已经有所发展或是发生改变。

    rt

    客户端请求授权后服务端 Socket 发送一个类给客户端下载 但问题是该类还有一个内部类。如果直接 newInstance 就会出现 NoClassDefFoundError 的情况

    这可如何解决呢。。看了一下 没有相关的预加载的方法

    4 条回复    2018-11-22 22:46:13 +08:00
    1010543618
        1
    1010543618  
       2018-11-18 22:07:39 +08:00
    发送一个类?
    Aidenboss
        2
    Aidenboss  
       2018-11-18 22:14:43 +08:00
    是程序运行以后才接收到 Socket 发送的类,才调用 newInstance() 的话,可能需要自定义 ClassLoader 才行。
    ljzxloaf
        3
    ljzxloaf  
       2018-11-19 03:04:30 +08:00
    是通过传输 class 的字节码构成这个类的吗?如果是的话需要将这个类放入当前线程上下文的 Classloader,如果跑在 tomcat 上的话一般是 WebAppClassLoader,但是因为 Classloader 的 defineClass 方法是私有方法,不能直接加载这个类的字节数组,你反射调一下就可以了。
    frienmo
        4
    frienmo  
       2018-11-22 22:46:13 +08:00
    你强调了 发送一个类 包含内部类。
    没记错的话内部类也会变成一个 Outter$Inner.class,所以应该传 Outter.class 和 Outter$Inner.class 两个类?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3519 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:50 · PVG 08:50 · LAX 16:50 · JFK 19:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.