HTTPUrlConnection.setContentHandlerFactory()
メソッドは、ファクトリがすでに定義されていることを示す例外をスローします。という事は承知しています。ファクトリの設定を解除して、コンテンツハンドラファクトリを変更することはできますか?
1 に答える
1
( のスーパークラス)のfactory
フィールドは、静的パッケージ アクセス メンバー変数です。API を介して変更される唯一の場所はメソッドであり、前述のように、アプリケーション内の任意の URL 接続 (またはサブクラス) に対して一度しか呼び出すことができません。URLConnection
HttpURLConnection
setContentHandlerFactory()
それを回避する方法はあると思いますが、理想的とは言えません。リフレクションを使用してフィールドの値をリセットおよび/または変更できます (アプリケーションにフィールドをアクセス可能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 に答える