1

次のインターフェイス宣言があります。

public interface SomeInterface {

    void someMethod() throws Exception;

}

サードパーティを使用して、このクラスの実装を生成します (JavaCC - 好奇心旺盛)

生成されたクラスは単純に次のようになります。

public class SomeClass implements SomeInterface {

   public void someMethod() throws SomeException {

    // Does something

   }
}

もちろん、 whereSomeExceptionは のサブクラスですException

(いいえ) 驚くべきことに、コードはコンパイルされません。

これに関する意見はありますか?

ありがとう!

編集

メソッドの名前を に変更しSomeMethod()ましたsomeMethod()

それは私のタイプミスでした...(ごめんなさい)

編集#2:

申し訳ありませんが、私の大きな間違いです。この例を書くことで、コードを削除せざるを得なくなりました。間違いが署名ではなく他の場所にあることに気づきませんでした。

それがランタイムコンパイルとカスタムクラスのロードの「魔法」です...

4

4 に答える 4

1

メソッド名が同じではないため、コンパイルされません (S/someMethod の大文字を確認してください)。

于 2009-11-08T16:04:44.620 に答える
1

Java では大文字小文字が重要です。あなたのインターフェースは言いsomeMethod、あなたのクラスは言いSomeMethodます .

于 2009-11-08T16:05:26.827 に答える
0

メソッド保護の1つはパブリックで、もう1つはデフォルトです。そのため、コードはコンパイルされません。パブリックまたはデフォルトの両方にします。

于 2012-12-20T16:29:36.750 に答える
0

インターフェイスメソッドが例外をスローするのはなぜですか?これはほとんどの場合間違っています。例外は、残りが拡張する基本タイプです。このように使用するためのものではありません。

于 2009-11-08T16:29:52.673 に答える