47
47

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Eclipse Junoでnull解析を行う

Last updated at Posted at 2012-12-26

Eclipse Junoでnull解析を行う

Eclipse Juno(4.2)から、@Nullableが付いたパラメータを、そのメソッド内でNullチェックしていない場合はwarningやerrorにすることが出来るようになります。

@Nullable

Nullableアノテーションがついているパラメータは、そのパラメータにはNullが渡されることも許容するという意味になります。
なので、メソッド内で値のNullチェックを行う必要があります。

例えば、以下のようなコードを書いたとします。

NullableTest.java
import static org.junit.Assert.assertEquals;

import javax.annotation.Nullable;

import org.junit.Test;

public class NullableTest {

	@Test
	public void test() {
		assertEquals("ABC", toUpper("abc"));
	}
	
	private String toUpper(@Nullable String param) {
		return param.toUpperCase();
	}
	
}

このtoUppserメソッドはparamパラメータのNullチェックをしていないので、NullPointerExceptionを起こす可能性があります。

error

そういったチェックは↑の画像のように静的にコンパイラがチェックしてくれると、実行時エラーを未然に防げて嬉しいです。

というようにこの機能は素敵なのですが、デフォルトの設定ではNullableはNullableでもorg.eclipse.jdt.annotation.Nullableのアノテーションのみが対象となっています。

さすがに、Eclipseプラグインでもなんでもないコードにorg.eclipseのNullableを使うのは嫌ですが、そこは設定で変更できます。

使用するNullableクラスの設定

Preferencesの「Java > Compiler > Errors/Warnings」の一番下に「Null analysis」という項目があります。

その項目の中の「Enable annotation-basd null inference」にチェックを入れ、その下の方の「Configure」を押します。

そうすると、↓の様にnull解析で使用するアノテーションのクラスを指定できるようになるので、ここでNullableにjavax.annotation.Nullableを、NonNullにjavax.annotation.Nonnullを指定しておきます。

これで、あとは各メソッドのパラメータに@Nullable@Nonnullをつけていくだけで、null解析が実行されるようになります。

おまけ

(2013/06/05)
こちらの内容は@bleisさん、@uasiさんより、@NullableなのにcheckNotNullしちゃうのは意味が無いと指摘いただいたので取り消させて頂きます。@bleisさん、@uasiさん、ご指摘ありがとうございます。

@NullableパラメータのNullチェックに毎回if文を書いていては面倒ですし、コードも無駄に長くなってしまいます。

そういう時は、guava libraryのPreconditions.checkNotNullを使うと以下のように簡単にnullチェックが書けて幸せになれます。

nullable
	private String toUpper(@Nullable String param) {
		return checkNotNull(param).toUpperCase();
	}

そのあたりはこちらにまとめました。
メソッド内でパラメータの値チェックを行う

47
47
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
47

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?