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