2つの解決策を提案できます。
まず、単純で、普遍的ではありませんが、おそらく役に立つでしょう。
私が見る限り、サブクラス化と次のメソッドByteBuffer
を許可するいくつかのパッケージプライベートコンストラクターがあります。final
public final ByteBuffer put(byte[] src) {
public final boolean hasArray() {
public final byte[] array() {
public final int arrayOffset() {
public final ByteOrder order() {
ByteBuffer
Buffer
これらのメソッドのいくつかを宣言するextends :
public final boolean hasArray() {
public final Object array() {
public final int arrayOffset() {
ご覧のとおり、put()
ここにはありませんがorder()
、戻り値の型はarray()
少し混乱しますが、それでも使用できます。したがって、これら 3 つのメソッドのみを使用する場合は、を含むBuffer
他のすべてをラップするユニバーサル ラッパーをサブクラス化して作成できます。私見ですが、必ずしもここにあるとは限りませんが、必要に応じてjavaassistのプロキシを使用できます。Buffer
ByteBuffer
第二に、より普遍的ですが、よりトリッキーな解決策です。クラスのロード中に特定のクラス(あなたの場合)final
から修飾子を削除するエージェントを作成できます。ByteBuffer
次に、javassist プロキシを作成できます。
2 番目のソリューションのバリエーションは次のとおりです。ByteBuffer
ソース コードを別のプロジェクトにコピーします。修飾子を削除final
してコンパイルします。次に、ブートストラップ クラスパスにプッシュします。このソリューションは、おそらく 2 番目よりも簡単です。
とにかく頑張ってください。