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 に答える