HTTPUrlConnection.setContentHandlerFactory()方法抛出异常,表明工厂已经定义。我明白那个。是否可以取消工厂设置并更改内容处理程序工厂?

最佳答案

factoryURLConnection的超类)中的HttpURLConnection字段是静态包访问成员变量。通过API对其进行修改的唯一地方是setContentHandlerFactory()方法,并且您已经注意到,对于应用程序中的任何URL连接(或子类),只能对其调用一次。

我相信可以解决这个问题,但这并不理想:您可以使用反射来重置和/或更改factory字段的值(假设您的应用程序具有创建field accessible的适当安全管理器特权)。

这是一个可以做到的片段:

ContentHandlerFactory newFactory = ... // create factory instance
factoryField = URLConnection.class.getDeclaredField( "factory" );
factoryField.setAccessible( true );
factoryField.set( null, newFactory );


这样做的问题是API不会期望这种情况会发生,因此可能会有不良的副作用(因为它适用于所有URL连接子类)。基本上,您需要自己承担风险。

09-28 14:05