0

サブクラスの名前をハードコーディングすることなく、実行元のサブクラスのインスタンスを作成する便利なスーパークラスを作成したいと思います。これを行うための最速の方法は何ですか?

サブクラスのコンストラクターは同じシグニチャーを持つと想定できます。たとえば、パラメーターはありません。

class Main {
    public static void main (String [] args) {
        Main m = new NAME-OF-SUBCLASS();
    }
} 

class MainSub1 extends Main { /*...*/ } 
class MainSub2 extends Main { /*...*/ } 

したがって、MainSub1$ java MainSub1から(コマンドラインから)mainを呼び出すと、MainSub1オブジェクトが作成されます。

私がこれを書いているときに、受け入れられた答えがそれを行うことができないと言っているこのスレッドを見つけましたが、もちろん、それは、どういうわけか、反省などによって可能ですよね?

4

1 に答える 1

1

私が本当にお勧めするわけではありませんが、それには汚いトリックがあります:

class Main {
    static Main m;
    public static void main (String [] args) {
        // use m
    }
} 

class MainSub1 extends Main { static { m = new MainSub1(); } } 
class MainSub2 extends Main { static { m = new MainSub2(); } }

真剣な答えは、mainサブクラスごとに個別に作成することですが、適切なインスタンスを受け入れる共通の継承されたメソッドを呼び出させます。

于 2012-07-12T17:28:50.377 に答える