3

これはプログラミングの悪い習慣ですが、私はより大きな課題の一部としてそれを行うように求められました。

スーパークラスを作成してから、2 つのサブクラスを作成しています。スーパークラスには、結果に応じて 2 つのサブクラスのいずれかを返す静的メソッドがあります。このメソッドを書くにはどうすればよいでしょうか。

たとえば、私はこのようなことをする必要があります

public abstract class Superclass{
    public static subclass? createFromFilename(String fileName){
            if(1==1)
               return subclass1;
            else
                   return subclass2;
    }
}

これは可能ですか?

4

3 に答える 3

4

これがあなたが探しているものかどうかはわかりませんが、クラス タイプを返したい場合は、サブクラス名を書き、 a を追加し.classてクラス タイプを取得します。適切な戻り値の型は、結果をスーパークラスとそのサブクラスに限定するジェネリックClassを持つ型です。

public static Class<? extends Superclass> createFromFileName(String fileName) {
     if (fileName.equals("A")) {
          return SubclassA.class;
     } else {
          return SubclassB.class;
     }
}

ただし、それぞれのクラスのオブジェクトを返したい場合は、新しいインスタンスを返し、戻り値の型を に設定するだけでそれを行うことができますSuperclass

public static Superclass createFromFileName(String fileName) {
     if (fileName.equals("A")) {
          new SubclassA();
     } else {
          new SubclassB();
     }
}
于 2013-01-27T17:25:59.373 に答える
1

あなたはこのようにすることができます

public abstract superClass
{
     public static superClass getBaseClass(...)
     {
           if(...)
           {
                 return new baseClass1();//baseClass1 should derive from superClass
           }
           else
           {
                 return new baseClass2();//baseClass2 should derive from superClass
           }
     }
}

これでできるようになりました

superClass sc=superClass.getBaseClass(..);

if(sc instanceof baseClass1)
{
     baseClass1 bc1=(baseClass1)sc;
     //work with bc1...
}

if(sc instanceof baseClass2)
{
     baseClass2 bc2=(baseClass2)sc;
     //work with bc2...
}
于 2013-01-27T17:26:09.607 に答える
0

メソッドの実行結果として、戻り値の型を判別しようとしています。これはできません。したがって、共通のスーパークラスの戻り値の型を持つことに耐える必要があります。ところで、コンパイル時に適切な戻り値の型がわかっている場合は、それを反映するようにメソッドを変更しないのはなぜですか (2 つのメソッドがありますか?)。

于 2013-01-27T17:50:49.513 に答える