annotation请出几道关于Annotation的原理性的题目给我

annotation  时间:2021-08-16  阅读:()

java 类后面跟[][]是什么意思,比如Annotation[][]

Annotation[][],它是代表的一个Annotation类型的二维数组; public Annotation[][] getParameterAnnotations(),Annotation[][]表示的是getParameterAnnotations()这个方法的返回值的类型是:Annotation类型的二维数组

Matlab中的箭头标注annotation 函数有没有三维的用法,求指点

没有直接的三维用法。

Annotation不同于普通的绘图对象,是放在一个单独的Annotation Layer里面,该层只有一个坐标系,专用于显示Annotation 对象。

而Annotation对象的Position或X、Y属性都是按照二维定义的。

可以获取绘图坐标系的位置、视角等信息,把希望在绘图坐标系中显示的坐标变换到Annotation坐标系,但处理起来比较繁琐,而且一旦有缩放或旋转操作,位置信息都会改变,想要妥善处理有不小的难度。

请出几道关于Annotation的原理性的题目给我

Annotation现在应用的非常广泛,常见的说法是模版代码(个人的理解就是接口和实现,也就是说所有的子类都继承统一的接口,实现接口中定义的方法)是使用Annotation的一个例子,呵呵,看了一下,感觉不是很明白,但自己感觉除了人云亦云的好处之外,自己感觉到的好处就是一个方法在拥有了Annotation之后,Annotation就能动态地描述方法的功能了,比如在写JUNIT的UNIT TEST CASE时, 原先的方式是TEST CLASS继承自TestCase类,覆盖setup()和teardown()方法,所有的测试方法必须以test作为prefix。

现在的方式是TESTCLASS不必强制继承TestCase类,原先的setup()方法被@Before标记代替,方法名也就可以任意定义了,这个标记已经说明这个方法会在每个测试方法执行前执行;类似,teardown()方法被@After方法替代,以test作为prefix的测试方法用@Test替代,方法名也可任意了。

呵呵,说了一堆,是不是真的有好处呢,现在所看到的也就是类不再受TestCase的约束了,方法名不再被基类限制,可以随便起名而已。

真的还有的别的非常神奇的地方吗? 我本来的期望是 难道能让类与JUNIT的类库解耦?但仔细一想不对吧,虽然可以不再和TestCase类耦合,但里面用的Annotation标志也是JUNIT中定义的呀,还是没啥用呀!好像大家还有一个常用的地方,比如很多的时候,我们写了一些类,要根据这些类去写相应的配置文件,如果用Annotation的话,这一过程也就可以自动化一些,而且不会让配置和原类进行分离,也就是说原先他们本应该有些内聚的关系的,手工的书写,让他们表明上看不到有什么关联,但实际上是不能互相脱离的,采用了Annotation就增加这种关联性。

先把它的作用放一边,学习一下它的定义和使用先 Annotation使用@interface声明,看起来特像interface,这和我的理解差不多,就像是替代interface似的,确实是起到了接口的作用,但是比interface灵活,不必继承接口,不必实现所有接口中的方法,就像把接口中的每个方法都拆分到了一个独立的接口中。

就像定义一个类和接口一样去定义一个Annotation,定义Annotation时最重要的用来描述这个新Annotation的三个Annotation,一个是@Documented,一个是@Target,一个是@Retention, 它们是JDK内置的,主要就是用来定义新的Annotation,就像Object类一样.它们的作用分别是 <!--[if !supportLists]--> I. <!--[endif]-->@Retention表明定义的Annotation的存在范围,它用了一个Enum(RetentionPolicy)来标明它的存在范围, <!--[if !supportLists]--> i. <!--[endif]-->如果是RetentionPolicy.SOURCE的话,就表明此Annotation只存在于源代码中,在编译之后是不会存在于class文件中的,这种方式主要用于编译时的检查; <!--[if !supportLists]--> ii. <!--[endif]-->RetentionPolicy.CLASS表明Annotation不仅会存在于源代码中,也会存在于CLASS文件中,但在运行时的VM中是没有相关信息的,JAVA中默认的就是这种方式; <!--[if !supportLists]--> iii. <!--[endif]-->RetentionPolicy.RUNTIME表明此Annotation不光编译后存在于CLASS文件中,而且在运行时的VM中也是存在的,可以被读取。

<!--[if !supportLists]--> II. <!--[endif]-->@Target表明新定义的Annotation能够被使用的范围(因为Annotation是属于修饰符,所以有其使用范围,就像final不能用来修饰接口,这里就用Target来指明),也使用了一个枚举来声明其范围――ElementType, TYPE:指类,接口(包括Annotation)以及枚举 FIELD:就是指field,类变量(叫属性也许更清晰一些),不含局部变量,也包括枚举中的常量 METHOD:指方法 PARAMETER:参数 CONSTRUCTOR:构造函数 LOCAL_VARIABLE:局部变量 ANNOTATION_TYPE:Annotation类型专用 PACKAGE:package专用 <!--[if !supportLists]--> III. <!--[endif]-->@Documented表明此Annotation在被使用时,可不可以被JAVADOC导出 JDK中内置的@Target Annotation的源码如下,表明它只能用Annotation类型,在运行时也能取到这个Annotation的信息,并且Annotation信息可以被导出到JDOC文档中。

package java.lang.annotation; @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Target { ElementType[] value(); 上面的步骤声明了一个Annotation,只是一个标记性的Annotation,还没有参数,可以进一步为Annotation增加参数,例如上面的@Target例子。

Annotation的参数声明完全类似于Interface中的方法,咋看起来只是一个没有方法体的方法声明,但是还有一些其它的限制: A.参数类型的限制,只能使用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和String,Enum,Class,annotations等数据类型,以及这一些类型的数组.例如,String value();这里的参数成员就为String. B.如果只有一个参数成员,最好把参数名称设为value,例如上面的@Target例子(此时使用时就可以不用写成参数名=参数值,而只需要在括号内写参数值) C.如果参数有默认值,要在方法的分号前面写上default 参数值,如下 @Documented @Inherited @Target({ElementType.METHOD,ElementType.CONSTRUCTOR}) @Retention(value = RetentionPolicy.RUNTIME) public @interface FirstSampleAnnotation { int size() default 4; String name() default "hehe"; } Annotation的使用方法很简单,因为它只是一般的修饰符,所以它和其它的修饰符的使用差不多,可以直接写在相应类似的前面,如果Annotation有参数的话,在后面加上括号然后是参数名=参数值,如果有多个参数用分号隔开。

上面自定义的Annotation的使用如下: public class UseAnnotationSuper { private String fname = null; private String lname = null; @FirstSampleAnnotation(size=4,name="oh,") public void setFname(String temp) { fname = temp; } } 如何应用上面自定义的Annotation, 一是可以用于信息提取,就如同JAVADOC一样 二是标记性处理如同JUNIT4中的@Test @After等 二是运行时信息检查,比如上面的例子中就可以在运行时,反射调用时,根据annotation进行检查或别的处理 Annotation的例子 import java.lang.annotation.*; @interface Trademark { String name(); String owner(); } @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.PACKAGE}) @interface License { String name(); String notice(); boolean redistributable(); Trademark[] trademarks(); } @License(name="Bill", notice="许可证", redistributable=true, trademarks={@Trademark(name="Mercedes",owner="Swedish"), @Trademark(name="Daewoo",owner="Korean") } ) public class TestLicenseAnnotation { public static void main(String[] args) { TestLicenseAnnotation test=new TestLicenseAnnotation(); License license=test.getClass().getAnnotation(License.class); System.out.println("License发放人:"+license.name()); System.out.println("License注意事项:"+license.notice()); System.out.println("License许可:"+license.redistributable()); Trademark [] marks=license.trademarks(); for(Trademark mark:marks){ System.out.println("商标名称:"+mark.name()); System.out.println("商标的使用者:"+mark.owner()); } } }

Hostigger不限流量VPS年20美元

Hostigger 主机商在前面的文章中也有介绍过几次,这个商家运营时间是有一些年份,只不过在我们圈内好像之前出现的次数不多。最近这段时间商家有提供不限流量的VPS主机,逐渐的慢慢被人认识到。在前面的介绍到他们提供的机房还是比较多的,比如土耳其、美国等。今天看到Hostigger 商家居然改动挺大的,原来蛮好的域名居然这次连带官方域名都更换掉去掉一个G(Hostiger )。估摸着这个域名也是之前...

Hostodo独立日提供四款特价年付VPS套餐 最低年付$13.99

前天,还有在"Hostodo商家提供两款大流量美国VPS主机 可选拉斯维加斯和迈阿密"文章中提到有提供两款流量较大的套餐,这里今天看到有发布四款庆祝独立日的七月份的活动,最低年付VPS主机13.99美元,如果有需要年付便宜VPS主机的可以选择商家。目前,Hostodo机房可选拉斯维加斯和迈阿密两个数据中心,且都是基于KVM虚拟+NVMe整列,年付送DirectAdmin授权,需要发工单申请。(如何...

无法忍受旧版不兼容PHP7+主题 更换新主题

今天父亲节我们有没有陪伴家人一起吃个饭,还是打个电话问候一下。前一段时间同学将网站账户给我说可以有空更新点信息确保他在没有时间的时候还能保持网站有一定的更新内容。不过,他这个网站之前采用的主题也不知道来源哪里,总之各种不合适,文件中很多都是他多年来手工修改的主题拼接的,并非完全适应WordPress已有的函数,有些函数还不兼容最新的PHP版本,于是每次出现问题都要去排查。于是和他商量后,就抽时间把...

annotation为你推荐
阿里P8阿里巴巴 P8,P9 及以上到底是什么水平通达oa精灵通达oa精灵系统密码忘了怎么找回高质量图片ps 合成图片,怎样才算高质量的?从那些方面判定照片的质量实数的定义数学中的“实数”是什么?实数的定义实数的概念是什么,实数包括0吗?第五人格抄袭第五人格逃生模式与猫和老鼠如出一辙,这是否存在抄袭?微信红包封面11位兑换码微信红包兑换码怎么用wifi快速破解器电脑版电脑版,WIFI密码破解软件哪个好?程序员段子为什么会有程序员间的鄙视链眼镜片品牌一线镜片品牌有哪些
免费美国主机 免费申请域名和空间 科迈动态域名 优惠码 便宜建站 qq数据库下载 52测评网 工信部icp备案号 东莞数据中心 美国在线代理服务器 免费高速空间 免费测手机号 网站在线扫描 登陆空间 阿里云手机官网 脚本大全 学生机 镇江高防服务器 windowsserver2012r2 hosting24 更多