7

文字列を返す静的メソッドがありますが、渡された文字列がいくつかの単語の1つと一致しない場合は、例外をスローします。以下のコードは私がやろうとしていることのほんの一例ですが、例外をスローした行に「非静的変数これは静的コンテキストから参照できません」というメッセージが表示され続けます。基本的に、getMsgからの戻り値は有効である必要があります。そうでないと、プログラムを続行できません。そのため、これをキャッチする方法が必要です。

public static String getMsg(String input) throws UnknownInputException{
      if (input.equals("A")){
           return "key for A";
      }
      throw new UnknownInputException("Some Message");
      return "unknownInput";
4

5 に答える 5

7

UnknownInputException問題は、おそらくネストされたクラスであり、newネストされたクラスとして演算子でインスタンス化する場合、クラスがインスタンス化されてから存在しない「親」オブジェクトにアクセスできる必要があるという事実によって引き起こされます静的コンテキストで。詳細については、「内部クラスを返す静的メソッド」を参照してください。

UnknownInputException考えられる解決策は、次のように宣言することstaticです。

private static class UnknownInputException extends Exception { ... }

もちろん、このクラスからインスタンス (非静的) メソッドやフィールドにアクセスすることはできませんが、それは問題にならない可能性があります (特に Exception クラスの場合)。

また、実行がその行に到達することはないため、行returnの後の ing valueは不要です。throw

于 2012-07-03T14:07:56.153 に答える
2

変数thisは、指定されたコード例には記載されていないため、エラーを引き起こすことはありません。

コードreturn "unknownInput";は実行されないため冗長です。

thisエラーの原因となる別の静的メソッドが使用されている必要があります。

于 2012-07-03T14:04:00.580 に答える
2

UnknownInputException は内部クラスです。静的にすると、コードは正常にコンパイルされました。助けてくれてありがとう。

于 2012-07-03T14:15:11.663 に答える
0

Java では、静的メソッドから例外をスローすることは完全に合法です。ただし、ここで提示したコードはコンパイルすることさえできません:)したがって、すべてのコードを提供してください。

ここで表示されるエラーは、静的メソッドのクラスで定義された非静的データ フィールドを使用していることを示しています。静的メソッドはどのインスタンスにも属していませんが、データ フィールドは...

于 2012-07-03T14:05:44.883 に答える
0

まず、return "unknownInput";行が実行されることはありません。そこにデッドコードの警告が表示されていませんか?

そして、あなたのメソッドには「this」参照がありません。このメソッドについて不平を言っていますか?

于 2012-07-03T14:06:10.400 に答える