Javaの標準アノテーションのサンプルです。
JavaSEに標準で用意されています。java.langパッケージにあります。
目次
@Override
メソッドをオーバーライドする必要があることを示す注釈です。
オーバーライドされていない場合はコンパイルエラーになります。
Java クラスの継承のサンプル
コード
8行目のクラスは、3行目のクラスを継承しています。
9行目は、@Overrideアノテーションです。親クラスにあるprintメソッドがオーバーライドされていない場合、コンパイルエラーになります。
package test1;
class Test {
void print() {
System.out.println("");
}
}
class Sample1 extends Test {
@Override
void print() {
System.out.println("1");
}
}
public class Test1 {
public static void main(String[] args) {
Sample1 s1 = new Sample1();
s1.print(); //1
}
}
@Deprecated
非推奨であるという注釈です。
コード
4行目は、@Deprecatedアノテーションです。
5行目のメソッドが非推奨であることを示しています。
package test1;
class Sample1 {
@Deprecated
void print() {
System.out.println("1");
}
}
public class Test1 {
public static void main(String[] args) {
Sample1 s1 = new Sample1();
s1.print(); //1
}
}
@SuppressWarnings
コンパイル時の警告を表示しないようにします。
コード
4行目は、@SuppressWarningsアノテーションで、引数はunusedです。
6行目の変数は未使用で本来なら警告がでますが、@SuppressWarningsアノテーションでその警告をださないようにしています。
package test1;
class Sample1 {
@SuppressWarnings("unused")
void print() {
int i;
System.out.println("1");
}
}
public class Test1 {
public static void main(String[] args) {
Sample1 s1 = new Sample1();
s1.print(); // 1
}
}
@SafeVarargs
可変長引数でジェネリクスの時に表示される警告を出さないようにします。
Java 可変長引数のメソッドのサンプル
コード
6行目は、@SafeVarargsアノテーションです。
7行目の可変長引数でジェネリクスを使用すると本来なら警告がでますが、@SafeVarargsアノテーションでその警告をださないようにしています。
package test1;
import java.util.ArrayList;
import java.util.List;
class Sample1{
@SafeVarargs
static void print1(List<String>... test){
for (List<String> c : test) {
System.out.println(c);
}
}
}
public class Test1 {
public static void main(String[] args) {
List<String> hiragana = new ArrayList<>();
hiragana.add("あ");
hiragana.add("い");
List<String> romaji = new ArrayList<>();
romaji.add("a");
romaji.add("b");
Sample1.print1(hiragana,romaji); //[あ, い][a, b]
}
}
@FunctionalInterface
インターフェースが関数型インターフェースかチェックします。
メソッドが1つでない場合にエラーになります。
3行目は、@FunctionalInterfaceを記述しています。
6行目は、メソッドを1つのみ記述しているのでエラーになりません。
7行目のコメントを外すとメソッドが2つになりエラーになります。
package test1;
@FunctionalInterface
interface InterfaceA {
int cnt1 = 3;
void printA();
//void printB();
}
class Class1 implements InterfaceA{
@Override
public void printA() {
System.out.println(cnt1);
}
}
public class Test1 {
public static void main(String[] args) {
Class1 c1 = new Class1();
c1.printA(); // 3
}
}
関連の記事