静的コード解析
@FunctionalInterface
public interface Foo {
public void foo();
public void bar();
}
> javac Foo.java
Foo.java:1:エラー:予期しない@FunctionalInterface注釈
コンパイラーチェック
@Override
コード解析
アノテーションの基礎
マーカーアノテーション
@MarkerAnnotaion
単一値アノテーション
@SingleValueAnnotation("my data")
フルアノテーション
@FullAnnotation(var1="data value1", var2="data value2", var3="data value3")
@TODOItems({ //
@TODO(
severity = TODO.CRITICAL,
item= " Add functionality... ",
assignedTo = "Brett McLaughlin";
),
@TODO(
severity = TODO.IMPORTANTL,
item= " Print usage... ",
assignedTo = "Brett McLaughlin";
),
@TODO(
severity = TODO.LOW,
item= " Roll a new website... ",
assignedTo = "Brett McLaughlin";
)
})
Overrideアノテーション
package com.oreilly.tiger.ch06;
public class OverriderTester {
public OverriderTester() {}
@Override
public String toString() {
return super.toString + " [Overrider Tester]");
}
@Override
public int hasCode() {
return toString().hasCode();
}
}
java.lang.Objectのメソドをオーバライド
Deprecatedアノテーション
package com.oreilly.tiger.ch06;
public class DeprecatedClass {
@Deprecated public void doSomething() {
// some code
}
public void doSomethingElse() {
//some code better than doSomething()
}
> javac -detprecated|Xlint:deprecated
SuppressWarningsアノテーション
@SupressWarning(value={"unchecked"})
public void NonGenericsMethod() {
List wordList = new ArrayList(); // no error information on list
wordList.add("foo");
}
独自のアノテーションの定義
@interface
package com.oreilly.tiger.ch06;
/**
* mthod is still in progress
*/
public @inteface Inprogress {}
@com.oreilly.tiger.ch06.inProgress
public void caluculateinterest(float amount, float late) {
// in profress
}