return null;
修士研究で開発しているシステムのプラグイン部分の機能の実装が終了したので、デバッグに入っていたのだが、とある部分で何故かNullPointerExceptionが出てくる。プログラムをトレースして調べていたのだが、VectorクラスのoutputPluginSettingにプラグインインターフェースのspiからプラグインの情報をaddすると、add自体は成功してVectorの配列サイズが1つ分拡張されているのが確認できるのだが、何故かnullを返す。
outputPluginSetting.add(spi.getPluginItem());
ここで、getPluginItem()はPluginItemクラスを返すメソッドである。
spiには直前までのトレースで、SimpleClockというプラグインのインスタンスが入っていたのが確認できた。
……となると、この行で何故かnullに変わってしまったのか。Javaのガベージコレクションの仕様???
と、延々と考えていたのだが、原因は意外な場所から発覚。
プラグインインターフェースの実装クラスのgetPluginItem()をこのように書いていた。
public PluginItem getPluginItem(){
PluginItem pi=new PluginItem();
pi.setPluginId(this.PluginId);
pi.setPluginInfo(this.PluginInfo);
pi.setEnableFlag(this.enable ? "true" : "false");
return null;
}
……
…
_| ̄|○
Eclipseの自動でメソッドをオーバーライドしてくれる機能を使うと、自動的にreturn null;と書いてくれるので、そのままにしていました。
自動なのは便利でいいですが、使うときはちゃんと注意しましょう、という話でした。