callbackが呼ばれない? @overrideが役に立つ
「プログラムは思うようには動かない」という名言があります。
この言葉には続きがあって「書かれている通りに動く」というオチです。
毎度、管理人イガジーです。
要するに、「こう動いて欲しい」と思っても(願っても、祈っても)、
そう動くように作っていなければダメだということですね。
頭を冷やして考えなおしたり、ステップ実行で追いかければ
どこが間違っているか分かるのですが、「あぁ勘違い」
とても人には言えないようなミスをしている事が少なくありません。
でも、そういうミスを何度か経験していると、似たようなトラブル時に
ひょっとして、変数名を間違えてるか?とか、メソッド名を打ち間違えている?
などと、推測できたりします。
これは実際にミスして悩む経験をしないと身につかないと思います。
イガジーが最初の頃にハマったのは、callbackメソッド名のミスです。
Canvasをextendsして、pubic void paints(Graphics g){…} に
処理を書いたのですがなぜか動かない。
あれ?ブレーク張って、repaint()しても、呼ばれない。来ない。なぜだ??
分かってしまえば、実にくだらないミスなのですが
paints(Graphics g)じゃなくて、paint(Graphics g)でした。
Paint(Graphics g)と書いてしまった事もあります。
こういうcallbackメソッド名のミスは、エラーが出ないので悩みます。
おそらく、同じようなミスで困った人は少なからずいるのだと思われ、
Java 1.6 から(だったと思います)@Override 修飾子が登場しました。
callback(override)するメソッドの1行上に@Override のおまじないをすると
Eclipseが、「Overrideしようったって、そんな元メソッドは無いよ」と
教えてくれるのです。いやー、これはありがたい、ありがたい。
という訳で、最初から @Override を活用してる方には、アホなヤツと
思われてしまうかもしれませんが、自分としては貴重な経験をした
と自分を納得させているのでした。
この記事へのコメントはこちら