自定义类加载器从网络上加载java类,通过反射和接口的使用问题

炁元 发布于 2016/01/26 16:27
阅读 874
收藏 0

     如何实现自定义类加载器加载从服务器下载下来的类并使用,在找资料时看到这样一句话:在通过NetworkClassLoader加载了某个版本的类之后,一般有两种做法来使用它。第一种做法是使用Java反射API。另外一种做法是使用接口。需要注意的是,并不能直接在客户端代码中引用从服务器上下载的类,因为客户端代码的类加载器找不到这些类。使用Java反射API可以直接调用Java类的方法。而使用接口的做法则是把接口的类放在客户端中,从服务器上加载实现此接口的不同版本的类。在客户端通过相同的接口来使用这些实现类。

      现在有两个问题,一是“使用Java反射API可以直接调用Java类的方法”这句话,使用反射调用java类的方法时在调用method.invoke不是应该传入一个对象参数,这时候还是得先通过class.newIntance方法实例化一个对象,需要使用这个类,此时客户端根本没有这个类,使用反射具体怎么使用从网络上下载的类呢?二是使用接口的话,加载接口的类加载器和从网络上加载的类的加载不是一个,直接赋值不会不应该会报不能转型的错吗?

      或者有什么办法可以使用从网络上加载的类,哪位给贴个代码,谢谢~

加载中
0
Ambitor
Ambitor
NetWorkClassLoader,你去了解下这个ClassLoader和ClassLoader的知识,网络上加载一个Class字节码,然后生成对象,反射操作~~,我之前写过一个成功了,至于你说的interface 我不太记得了 你去测下就知道,很容易测试,按理解来说 你用同一个ClassLoader加载了这个interface 并且 所有属性都相同  可能可以,你自己测试下~~
炁元
炁元
回复 @Ambitor : 所以才要抛出异常啊
Ambitor
Ambitor
因为在java 虚拟机里面一个类的唯一标识是classloader➕类名啊....
炁元
炁元
用接口其实也用到了反射,我就是觉得为什么没有抛cast异常
0
1
1505412718
下载以后通过NetWorkClassLoader可以创建实例
1
1505412718
回复 @炁月 : 1.要通过NetworkClassLoader.loadclass然后再class.newInstance。2.NetworkClassLoader应该是派生自客户端的ClassLoader,接口在客户端的ClassLoader中,实现在NetworkClassLoader中,创建实现实例时通过NetworkClassLoader就可以了
炁元
炁元
等于没说,我的问题是这个吗
返回顶部
顶部