0

私は次のことをしようとしています:

abstract class G {
    protected var = 0;
}

class G1 extends G {
    var = 1;
}

class G2 extends G {
    var = 2;
}

// This is where I'm having a problem
public G method() {
    switch(someVar) {
        case x:
            return new G1();
        case y:
            return new G2();
    }
 }

Javaは、メソッドがGのタイプを返す必要があると不平を言っています。G1またはG2(どちらもGを拡張します)を返すにはどうすればよいですか?私がこれに完全に間違ってアプローチしているのは非常によくあるかもしれません...

ありがとうございました。

4

2 に答える 2

4

あなたの問題は相続とは関係ありません。スイッチがまたはGに該当しない場合は、例外をスローするか、あるタイプの何かを返す必要があります。case xcase y

例えば:

public G method() {
    switch(someVar) {
        case x:
            return new G1();
        case y:
            return new G2();
        default:
            // You can return null or a default instance of type G here as well.
            throw new UnsupportedOperationException("cases other than x or y are not supported.");
    }
 }
于 2012-10-21T20:42:33.133 に答える
0

switch-caseブロックにデフォルトオプションを追加します。

        default: ....

そうでない場合、またはそうsomeVarでない場合はreturnステートメントが ないため、不平を言います。xy

または、デフォルトを追加することもできますreturn statement in the end

  public G method() {
    switch(someVar) {
       case x:
        return new G1();
       case y:
        return new G2();
     }
     return defaultValue; // return default
  }
于 2012-10-21T20:46:36.417 に答える