Javaで特定のクラスの複数の子クラスを制限できる手順を知りたいです。
たとえば、クラス A がある場合、A を拡張できるクラスは 1 つだけです。つまり、子クラスは 1 つしか許可されません。
私は会社の面接でこの質問をされたことがあり、助けや指示を本当に感謝しています.
Javaで特定のクラスの複数の子クラスを制限できる手順を知りたいです。
たとえば、クラス A がある場合、A を拡張できるクラスは 1 つだけです。つまり、子クラスは 1 つしか許可されません。
私は会社の面接でこの質問をされたことがあり、助けや指示を本当に感謝しています.
これをコンパイラレベルで制限することはできません。実行時にこれを「一種」制限することができます。Class
子を含む静的変数を作成します。この変数は、基本クラスのコンストラクターによって更新されます。他の子がインスタンス化されると、コンストラクターは例外をスローします。
class Base {
private static Class<? extends Base> childClass = null;
protected Base() {
if (childClass == null) {
childClass = this.getClass();
}
if (!childClass.equals(this.getClass())) {
throw new IllegalStateException("More than one child");
}
}
}
他の解決策は、アプリケーションのクラスパスをスキャンして、を拡張するすべてのクラスを見つけることBase
です。さらに別の解決策は、クラスローダーをインターセプトして、ロードされたクラスが実行時にキャッチされるようにすることです。クラスローダーは、スタンドアロンアプリケーションを開発している場合はプログラムで制御するか、クラスローダーに直接アクセスできない場合はインストルメンテーションパッケージを使用して制御できます。
私はここであなたのインタビュアーに知られていないテクニックについて言及したと思います...:)
クラスインスタンスではなくクラス自体について話していると仮定すると、制限したいクラスにプライベートコンストラクターを持たせ、(唯一の)サブクラスをネストされたクラスとして宣言することしかできないと思います。