0

try / catchブロック内で変数を初期化したにもかかわらず、変数が初期化されないことを通知するコードブロックで問題が発生しています。

私が持っているコードは次のとおりです。

public String doSomething(String input1, String input2) {
    CustomizedObject myobject = new CustomizedObject();
    try {
        Output out = (Output) myobject.getOutput();
    } catch (IOException e) {
        System.err.println("Error: " + e.getMessage());
    }
    return out.doSomethingString(input1, input2);
}

ただし、ローカル変数「out」を作成する必要があると言っています。

私のCustomizedObjectのコードは以下のとおりです。

public class CustomizedObject {

   private String attribute;

   public CustomizedObject() {
        attribute = "awesome";
   }

   public String getOutput() throws IOException {
       //.....code doing some stuff......
       return attribute;
   }
}
4

2 に答える 2

3

Output outtry/catchブロック内を初期化することはできません。次のことを試してください。

public String doSomething(String input1, String input2) {
    CustomizedObject myobject = new CustomizedObject();
    Output out = null;
    try {
        out = (Output) myobject.getOutput();
    } catch (IOException e) {
        System.err.println("Error: " + e.getMessage());
    }
    return out.doSomethingString(input1, input2);
}

上記のコードは、がスローされたNullPointerException場合にaをスローすることに注意してくださいIOException。だからあなたはおそらくしたくないでしょout.doSomethingout == null

于 2013-03-06T01:49:27.490 に答える
2

コードがで例外をスローするOutput out = (Output) myobject.getOutput();と、returnステートメントを実行できなくなります。既存のreturnものをトライの内側に移動し、トライがキャッチを返す場合は別のリターンを持っている必要があります。

public String doSomething(String input1, String input2) {
    CustomizedObject myobject = new CustomizedObject();
    try {
        Output out = (Output) myobject.getOutput();
        return out.doSomethingString(input1, input2);
    } catch (IOException e) {
        System.err.println("Error: " + e.getMessage());
        return "Something went wrong";
    }
}
于 2013-03-06T01:50:40.377 に答える