1

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

4

1 回答 1

1

(的超类)中的factory字段是静态包访问成员变量。它通过 API 修改的唯一地方是方法,正如您所指出的,您只能为应用程序中的任何 URL 连接(或子类)调用一次。URLConnectionHttpURLConnectionsetContentHandlerFactory()

我相信有一种解决方法,但这并不理想:您可以factory使用反射重置和/或更改字段的值(假设您的应用程序具有适当的安全管理器权限以使该字段可访问)。

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

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

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

于 2010-04-30T12:30:07.250 回答