はじめに
* 分かってしまえば、大したことなかったのだが、以下「エラー内容」のようなコンパイルエラーになり
ビルドできない
* Eclipseの機能を使っても解決できず。
エラー内容
【日本語】
例外 Exception は XXX.xxx() にある throws 節と矛盾する
【英語】
Exception Exception is not compatible with throws clause in XXX.xxx()
プログラム
AbstractClass.java
public abstract class AbstractClass extends Thread implements IAbstractClass {
public abstract void methodA() throws SampleException;
@Override
public void run() {
try {
this.methodA();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
ChildClass.java
* 「public void methodA() throws SampleException {」でエラーになる。
public class ChildClass extends AbstractClass implements IChildClass {
// ★ここでエラー★
@Override
public void methodA() throws SampleException {
throw new SampleException();
}
}
IChildClass.java
public interface IChildClass {
void methodA();
}
SampleException.java
public class SampleException extends Exception {
private static final long serialVersionUID = 1L;
}
解決方法
* 上記のサンプルプログラムでいうと、親クラス「AbstractClass」の「methodA()」だけでなく、
インターフェース「IChildClass」の「methodA()」にも「 throws SampleException」を追加する
# そもそも、こんな作りがよくないってのは置いといて。
修正例
IChildClass.java
public interface IChildClass {
void methodA() throws SampleException;
}