Annotation,大概最常见的就是@Override了,当我们写的类别继承自其他类别时,要覆写父类别的方法,假设不小心打错父类别方法的名称,或者参数、返回型态不一致,那@Override就会在IDE或者编译时期告诉我们这个方法可能没有覆写到父类别的方法哦~(因为父类别没有同样签章的方法)。
这个Annotation我们也可以自己写,首先要先这样:
public @interface CustomAnnotation { }
很像定义介面,不过interface前面要加个"@"。
然後我们可以帮它加属性:
public @interface CustomAnnotation {
String value();
String[] author() default "";
}
属性後面不像定义类别,需要多加"()",可以往setter和getter的感觉想像吧!
如果我们定义有value的属性,那它在单独指派时可以直接指派值,不需要先写出属性名称後再打"=";可以看到author属性後面写了关键字default,这就代表是预设的属性值,假若Annotation在定义的时候属性没有给预设值,那使用时就必须给那个属性值:
public class Student{
@CustomAnnotation(value = "Midterm")
public void doTest(){}
@CustomAnnotation("Final")
public void doTest2(){}
@CustomAnnotation(value = "Pickup", author={"Johnny", "Andy"})
public void haveFun(){}
}
因为@CustomeAnnotation的value没有预设值,势必都要指派value属性的值过去,而author属性可以不指派,那就是预设的""。
Annotation的属性型别是有限制的,只能是primitive, String, Class, enum, annotation及其阵列型式:
public @interface CustomAnnotation {
publci enum Difficulty{EASY, MEDIUM, HARD}
String value();
String[] author() default "";
Difficulty difficulty() default Difficulty.EASY;
}
Annotation除了可以贴在其他人身上,自己身上也可以贴Annotation,不过只有4种可以贴:
针对@Retention多说明一点,Java预设是RetentionPolicy.CLASS,代表说在编译时期结束後会保留在.class档案,但是执行时期无法取用;而RetentionPolicy.SOURCE代表编译时期会取用,但编译完不会存成.class档案;而RetentionPolicy.RUNTIME就代表执行时期也可以透过java.lang.reflect.AnnotatedElement套件的功能取用到Annotation的属性内容:
public static void main(String[] args){
Student student0 = new Student();
Method doTest = student0.getClass().getMethod("doTest");
CustomAnnotation ca = doTest.getAnnotation(CustomAnnotation.class);
ca.value();
ca.author();
ca.difficulty();
}
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomAnnotation {
publci enum Difficulty{EASY, MEDIUM, HARD}
String value();
String[] author() default "";
Difficulty difficulty() default Difficulty.EASY;
}
<<: [Day 28] Final Project (4/5) — 部署模型到 Google AI Platform
>>: 学习Python纪录Day28 - 在多文字档中搜寻关键字
URL Encoding(URL编码) URL 编码将字符转换为可以通过 Internet 传输的格...
阿嬷成为网页前端工程师的下一步 尽管篇幅长短不一,我们在这 30 天当中讨论了怎麽写 HTML 标签...
上次已经玩过挖矿龟 Mining Turtle,此外还有其他几个类似的小乌龟 包括 Digging ...
前言 今天要介绍最後一个 React hook - useDebugValue ,它也是个较少使用的...
前言 各位早安,书接上回我们练习了条件判断语法 if else elif 的用法,今天我们要来介绍它...