1

親が動的なサブクラスを作成できますか? 例えば; class A extends Bコード上B、条件に応じて変更できますか? メソッドから返すことができる場合、メソッドの戻り値の型は何になりますか? つまりclass A extends getClassAccToCondition()リターンタイプ。

4

5 に答える 5

2

他の回答がすでに言っているように、これは不可能です。

この種の問題には、ファクトリ パターンを使用できます。次のようなクラス階層がある場合:

class SuperType { ... }
class SubType1 extends SuperType {...}
class SubType2 extends SuperType {...}

次のようなファクトリを持つことができます。

class Factory {
  public static SuperType create (Condition cond) {
    if(cond.matchForType1())
      return new SubType1();
    else
      return new SubType2();
  }
}

経由でこのメソッドを呼び出すことができますFactory.create(<condition that match for the required type>)

「factory pattern」+「java」で検索すると、より良い例がたくさん見つかります。

于 2013-01-21T07:34:40.857 に答える
0

技術的には、Java でこれを実現することはできません。しかし、ポリモーフィズムとある種のファクトリ メソッド パターンを使用して、実際のビジネス上の問題を解決したいと考えています。これが役立つかどうかはわかりませんが、親を変更することはJavaでは実現できません。

于 2013-01-21T07:54:19.153 に答える
0

Factoryパターンによる単純なポリモーフィズムのバリエーションのような方法を使用することにしました。それは私が思うにうまくいくでしょう。回答ありがとうございます。

public class Main {
    public static I getClassBelongToCondition(boolean Condition) {
        if (Condition) {
            return new A();
        } else {
            return new C();
        }
    }

}

interface I {
}

class A extends B implements I {
}

class C extends D implements I {
}

class B {
}

class D {
}
于 2013-01-21T10:19:55.423 に答える
0

コンパイル時に静的に型指定されていないクラスを定義することはできません。ただし、実行時にクラスを生成できます。 javassistをご覧ください。そうは言っても、コード生成だけが選択肢ではありません。動的スーパークラスが必要なく、インターフェイスのみが必要な場合は、動的プロキシを使用できます。

于 2013-01-21T08:33:50.027 に答える
0

いいえ、拡張するクラスを明示的に指定する必要があります。

于 2013-01-21T07:20:53.313 に答える