0
0

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 3 years have passed since last update.

Javaにおけるアノテーションの復習メモ

Posted at

アノテーションとは

  • ソースコードの注釈
  • コンパイラやJVMに付加情報を伝える
  • 目印のようなもの

主なアノテーション

→単一の抽象メソッドを持つインターフェイス(1つだけ持てる)
→staticメソッド、デフォルトメソッドは複数可
→Objectクラスのpublicメソッドである抽象メソッドは含まない(複数定義可)

package cp2.no3;

@FunctionalInterface
public interface FunctionalInter<T> {

	// 単一の抽象メソッド(抽象メソッドは1つしか定義できない。2個以上は不可)
	void foo(T t);

	// Objectクラスのpublicメソッド
	String toString();

	// Objectクラスのpublicメソッド
	boolean equals(Object object);

	// staticメソッド
	static void X() {};

	// defaultメソッド
	default void Y() {};
}

→プログラマが使用することを推奨されていないプログラム要素
→(例)コンストラクターDate(String)は非奨励
→DateFormatクラスのparse()メソッドの使用が推奨
→since, forRemovalという要素がある
→since…非奨励になったバージョンを示す
→forRemoval→将来のバージョンで注釈付きプログラム要素を削除する意志を示す

package cp2.no6;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {

	@Deprecated public static void main(String[] args) throws ParseException {

		// 非奨励コード
		Date date = new Date("2021/8/3");
		System.out.println(date);

		// 奨励コード
		DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
		Date date2 = df.parse("2021/8/3");
		System.out.println(date2);
	}
}

→引数に抑制したい警告を指定することで、コンパイル時に表示される警告を抑制できる。
→rawtypes…ListではなくListの使用など、型の使用に関連する警告を抑制
(古いJava環境下でメンテナンスする際に、警告を抑制するなど)
→deprecation…@Deprecatedアノテーションがつけられたものに関する警告を抑制

package cp2.no7;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Main {

	public static void main(String[] args) {

		// @Deprecatedによる警告
		@SuppressWarnings("deprecation")
		Date date = new Date("2021/8/3");

		// 型指定をしていない
		@SuppressWarnings("rawtypes")
		List list = new ArrayList();
	}
}

  • @SafeVarargs→安全でない可変長引数に対する警告を無効化

→実行時にClassCastExceptionが発生する可能性があるコードなど
→final, static, privateのいずれかのメソッドに限定

package cp2.no8;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {

	public static void main(String[] args) {
		m(new ArrayList<String>());
	}

	@SafeVarargs
	static void m(List<String>...stringLists) {

		Object[] array = stringLists;
		List<Integer> tempList = Arrays.asList(1);
		array[0] = tempList;

		// [[1]]の要素であるint型の1をStringの文字列に格納しようとするので
		// 実行するとClassCastExceptionが発生
		String s = stringLists[0].get(0);
	}
}

今後の課題

  • カスタムアノテーションについても学習していく必要があると感じる。
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?