トップ «前の日記(2012/06/05(Tue)) 最新 次の日記(2012/06/09(Sat))»
【ソース+水=麦茶色の何か】

半期 四半期 全カテゴリ

今日の一言


2012/06/06(Wed) デッドライン直前の仕様変更は鬼過ぎる [長年日記] 23:30現在 23℃

_ [Android][java]Android(Java)のアプリ作成時にOverrideでEclipseがエラー吐く場合

参考:

http://d.hatena.ne.jp/hirai428/20101111/1289465268
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=36667&forum=12

例えば、以下のようなAndroidのコードを書いた場合に次のようなエラーが出ることがある。

「型 new DialogInterface.OnKeyListener(){} のメソッド onKey(DialogInterface, int, KeyEvent) はスーパークラスのメソッドをオーバーライドする必要があります」

 private AlertDialog.Builder builder;
 builder = new AlertDialog.Builder(this);
 builder.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
	if (KeyEvent.KEYCODE_BACK == keyCode && KeyEvent.ACTION_DOWN == event.getAction())		{
		return true;
	}
	return false;
}
 });

この場合、ウィンドウ→設定→Java→コンパイラーの「コンパイラー準拠レベル」を1.6以上に設定すればエラーが出なくなる。

これは、onKey()がabstractメソッドとして実装されているため。

JDKの準拠レベルが1.5の場合、既に実装されているメソッドのオーバーライドしかできないため、abstractメソッドを実装しようとするとエラーが出てしまう。

よって、abstractメソッドのオーバーライドを許容するようになったJDKの準拠レベル1.6以降に設定することで無事にコンパイルできるようになる。

以上。