2

Javaの他のすべてのクラスは、Objectクラスを継承します。

自分のFastObjectクラスに基づいて、Javaに2番目の完全に別個のクラス階層を追加することは可能ですか?

そうすることでの私の当初の目標は、特定のアルゴリズム用に特別に設計された機能の少ない、より小さく、より高速なオブジェクトを作成することでした。しかし、はっきりさせておきますが、これが「良い考え」であるかどうかには興味がありません。それが可能かどうか知りたいだけです。私はそうする方法を見つけることができませんでした。JVMを変更する必要がありますか?新しいブートクラスパス機能?無視Objectして交換を検討する本当の解決策はありますjava.lang.Classか?VMの代わりに直接Javaコンパイラを使用すると、仕事が簡単になりますか?

Object明確にするために、私はルートクラスを編集したいだけではありません。そのためには、Javaライブラリ全体を書き直す必要があります。現在の階層を置き換えたくはありません。同じコードで使用できる別の階層を作成したいだけです。

4

2 に答える 2

2

いいえ、これは不可能です。

作成されたすべてのクラスは、明示的または暗黙的に別のクラスを拡張します。クラスを作成し、それが拡張するクラスを明示的に定義すると、そのクラスが拡張されます。そうでない場合は、暗黙的に拡張されObjectます。演算子やそのようなものをオーバーロードする方法がないのと同じように、これを回避する方法はありません。これは、Javaプログラミング言語の基本的な設計上の決定です。

すべてのクラスが拡張されObjectます。そうでないのはプリミティブ型だけです。もちろん、これの例外はObjectそれ自体であり、それ自体は拡張されません。

于 2012-09-19T19:59:32.170 に答える
1

ブートクラスパスをいじることで、独自のObject実装を注入できる場合があります。ただし、Object以外のベースオブジェクトを使用する方法はないと思います。バイトコード操作を試すこともできますが、変更したクラスがクラスローダーによって拒否される可能性は十分にあります。

于 2012-09-19T19:58:14.860 に答える