精华内容
下载资源
问答
  • 带有数组元素的Java自定义注释

    千次阅读 2021-03-04 05:18:58
    我有一个自定义注释如下. @Retention(RetentionPolicy.RUNTIME) @... 我试过下面的代码, final List 但得到以下错误在第二行anyMatch, java.lang.ClassCastException: [I cannot be cast to java.lang.Integer 谢谢

    我有一个自定义注释如下.

    @Retention(RetentionPolicy.RUNTIME)

    @Target({ ElementType.TYPE,ElementType.METHOD })

    @Documented

    @Conditional(OnApiVersionConditional.class)

    public @interface ConditionalOnApiVersion {

    int[] value() default 5;

    String property();

    }

    OnApiVersionConditional是,

    public class OnApiVersionConditional implements Condition {

    @Override

    public boolean matches(final ConditionContext context,final AnnotatedTypeMetadata Metadata) {

    final MultiValueMapMetadata.getAllAnnotationAttributes(ConditionalOnApiVersion.class.getName());

    attributes.get("value");

    final String inputVersion = context.getEnvironment().getProperty("userInputVersion");

    }

    在我的Bean注释中,

    @Bean

    @ConditionalOnApiVersion(value = {6,7},property = "userInputVersion")

    还有像单一版本匹配的bean

    @Bean

    @ConditionalOnApiVersion(value = 8,property = "userInputVersion")

    我想验证属性文件中的userInput版本到可用的Beans支持版本.不确定,如何获取值,迭代并与userInoutVersion进行比较.该值可以是8或{6,7}作为int数组.不确定,如何迭代该值以检查是否有任何值与输入版本匹配.

    final List apiVersions = attributes.get(“value”).stream().collect(Collectors.toList());

    题:

    如何迭代attributes.get(“value”)并与userInputVersion进行比较?

    attributes.get(“value”)返回一个Object列表.

    我试过下面的代码,

    final List

    但得到以下错误在第二行anyMatch,

    java.lang.ClassCastException: [I cannot be cast to java.lang.Integer

    谢谢

    展开全文
  • Java注解的定义

    2021-03-09 20:50:16
    一、元注解1、元注解概述元注解:用于描述注解注解2、常用的元注解(1)@Target:描述注解能够作用的位置Target 里面是一个 ElementType[] value() 的枚举数组,这个数组里面指定了10个常量对象。源码:1 public ...

    一、元注解

    1、元注解概述

    元注解:用于描述注解的注解

    2、常用的元注解

    (1)@Target:描述注解能够作用的位置

    Target 里面是一个 ElementType[] value() 的枚举数组,这个数组里面指定了10个常量对象。

    源码:

    1 public enumElementType {2 /**Class, interface (including annotation type), or enum declaration*/

    3 TYPE, //表示可以作用与类、接口上4

    5 /**Field declaration (includes enum constants)*/

    6 FIELD, // 表示可以作用于成员变量上7

    8 /**Method declaration*/

    9 METHOD, // 表示可以作用与方法上10

    11 /**Formal parameter declaration*/

    12 PARAMETER,13

    14 /**Constructor declaration*/

    15 CONSTRUCTOR,16

    17 /**Local variable declaration*/

    18 LOCAL_VARIABLE,19

    20 /**Annotation type declaration*/

    21 ANNOTATION_TYPE,22

    23 /**Package declaration*/

    24 PACKAGE,25

    26 /**

    27 * Type parameter declaration28 *29 *@since1.830 */

    31 TYPE_PARAMETER,32

    33 /**

    34 * Use of a type35 *36 *@since1.837 */

    38 TYPE_USE39 }

    (2)@Retention:描述注解被保留的阶段

    该注解右 RetentionPolicy 枚举类型的三个常量对象指定:

    分别是:

    1 public enumRetentionPolicy {2 /**

    3 * Annotations are to be discarded by the compiler.4 */

    5 SOURCE, //当前被描述的注解,不会存在 class 字节码文件中(不常用)6

    7 /**

    8 * Annotations are to be recorded in the class file by the compiler9 * but need not be retained by the VM at run time. This is the default10 * behavior.11 */

    12 CLASS, //当前被描述的注解,会保留到class字节码文件中,但是不会被JVM读取。(不常用)13

    14 /**

    15 * Annotations are to be recorded in the class file by the compiler and16 * retained by the VM at run time, so they may be read reflectively.17 *18 *@seejava.lang.reflect.AnnotatedElement19 */

    20 RUNTIME //当前被描述的注解,会保留到class字节码文件中,并被JVM读取到(自定义常用)21 }

    (3)@Documented:描述注解是否被抽取到 API 文档中

    如果在被描述的注解A上添加了该元注解,那么当一个类B使用注解A时,注解A会被抽取到 api 文档中。

    (4)@Inherited:描述注解是否被子类继承

    如果在被描述的注解A上添加了该元注解,那么当一个类B使用注解A时,这个类B的子类C也会使用注解A。

    二、自定义注解

    1、自定义注解格式

    语法格式:

    元注解

    【修饰符】 @interface 注解名称{

    属性列表;

    }

    首先创建一个 MyAnno 类,然后在 cmd 窗口通过 javac 文件名.java 编译文件,接着再使用 javap 文件名.class 进行反编译。

    public @interface MyAnno {}

    通过反编译,我们得到一个信息:

    public interface MyAnno extends java.lang.annotation.Annotation {}

    总结:注解本质上就是一个接口,该接口默认继承Annotation接口

    2、属性

    注解既然是一个接口,那么就可以在接口中声明方法。

    属性:接口中的抽象方法。

    属性的返回值类型有下列取值:

    ① 基本数据类型

    ② String 类型

    ③ 枚举 Enum 类型

    ④ 注解类型

    ⑤ 以上类型的数组

    3、属性的赋值

    在注解中定义了属性,在使用时需要给属性赋值:

    (1) 如果定义属性时,使用 default 关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。

    (2) 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。

    (3) 数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}可以省略。

    Demo:自定义一个注解

    1 importjava.lang.annotation.ElementType;2 importjava.lang.annotation.Retention;3 importjava.lang.annotation.RetentionPolicy;4 importjava.lang.annotation.Target;5

    6 /**

    7 * 描述需要执行的类名和方法名8 */

    9 @Target({ElementType.TYPE})10 @Retention(RetentionPolicy.RUNTIME)11 public @interfacePro {12

    13 String className();14 String methodName();15 }

    总结:注解是给编译器,解析程序使用的;注解不是程序的一部分。

    展开全文
  • Java注解用法

    2021-03-11 10:15:10
    Java注解用法注解元素的提供值必须是编译时常量表达式,不能使用null作为注解中任何类型元素的值。基本类型注解类型中的元素的数据类型可以是任何基本数据类型:byte,short,int,long,float,double,boolean 和 ...

    Java注解用法

    注解元素的提供值必须是编译时常量表达式,不能使用null作为注解中任何类型元素的值。

    基本类型

    注解类型中的元素的数据类型可以是任何基本数据类型:byte,short,int,long,float,double,boolean 和 char。

    Version注释类型声明两个元素:major和minor,并且都是int数据类型。

    以下代码声明了注解类型:

    public @interface MyAnnotation {

    byte a();

    short b();

    int c();

    long d();

    float e();

    double f();

    boolean g();

    char h();

    }

    @MyAnnotation(a=1, b=2, c=3, d=4, e=12.34F, f=1.89, g=true, h='Y')

    可以使用编译时常量表达式来指定注解元素的值。以下两个版本注释实例有效的:

    @Version(major=2+1, minor=(int)13.2)

    @Version(major=3, minor=13)

    字符串类型

    可以在注释类型中使用String类型的元素。以下代码定义了名为Name的注解类型。 它有两个元素:first和last,它们都是String类型。

    public @interface Name {

    String first();

    String last();

    }

    @Name(first="Tom", last="Smith")

    public class NameTest {

    @Name(first="Jack", last="Iaan")

    public void aMethod() {

    }

    }

    在String类型的元素的值表达式中使用字符串连接+运算符是有效的。

    @Name(first="Ja" + "ck", last="Ia" + "an")

    Class类型

    以下代码显示如何使用Class类型作为注解值。

    import java.io.IOException;

    @interface MyAnnotation {

    Class extends Throwable> willThrow() default java.lang.Throwable.class;

    }

    public class Main {

    @MyAnnotation(willThrow = IOException.class)

    public static void testCase1() {

    // Code goes here

    }

    @MyAnnotation()

    public static void testCase2() {

    }

    }

    枚举类型

    注解可以具有枚举类型的元素。

    enum Level {

    PENDING, FAILED, PASSED;

    }

    @interface Review {

    Level status() default Level.PENDING;

    String comments() default "";

    }

    @Review(status = Level.PASSED)

    public class Main {

    }

    注解类型

    可以使用注解类型作为另一个注解类型的声明内的元素的类型。要为注解类型的元素提供值,请使用用于创建注解类型实例的语法。

    @interface Name {

    String first();

    String last();

    }

    @interface Version {

    int major();

    int minor() default 0; // zero as default value for minor

    }

    @interface Description {

    Name name();

    Version version();

    String comments() default "";

    }

    @Description(name = @Name(first = "Tom", last = "Smith"), version = @Version(major = 1, minor = 2), comments = "Just a test class")

    public class Main {

    }

    注解可以具有数组类型的元素。数组类型可以是以下类型之一:

    原始类型

    java.lang.String类型

    java.lang.Class类型

    枚举类型

    注解类型

    需要在大括号中指定数组元素的值。数组的元素由逗号分隔。

    @interface ItemList {

    String[] items();

    }

    @ItemList(items = { "A", "B" })

    public class Main {

    }

    如果数组中只有一个元素,则允许省略括号。

    @ToDo(items={"A"})

    @ToDo(items="A")

    传递一个空数组

    @ToDo(items={})

    速记注解语法

    假设有一个注释类型如下。

    public @interface Enabled {

    boolean status() default true;

    }

    要使用带有默认值的Enabled注解类型注释程序元素,可以使用status元素指定值,因为它具有默认值。可以进一步省略括号。

    @Enabled

    public class Main {

    }

    @Enabled()

    public class Main {

    }

    只有一个元素的注解类型有速记语法。如果注释类型只有一个具有命名值的元素,可以省略name = value对中的名称。以下代码声明了 Company 注解类型,它只有一个名为value的元素:

    public @interface Company {

    String value();

    }

    当使用 Company 注释时,可以省略name = value对的名称。

    @Company(value="Inc.")

    public class Test {

    }

    变成 -

    @Company("Inc.")

    public class Test {

    }

    以下代码显示了如果元素数据类型是数组,如何使用缩写。

    public @interface Item {

    String[] value();

    }

    @Item({"A", "B"})

    public class Test {

    }

    如果在数组注释类型中只指定一个元素,可以进一步省略括号。

    @Item("A")

    public class Test {

    }

    如果在使用注释时只提供一个值,则元素的名称为假设那个值。

    ¥ 我要打赏

    纠错/补充

    收藏

    加QQ群啦,易百教程官方技术学习群

    注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

    展开全文
  • Java注解默认值

    2021-02-26 20:45:14
    可以为注解中的元素定义默认值。不需要为带有默认值的注解元素提供值。默认值可以使用以下一般语法定义: @interface { () default ;}关键字default指定默认值。默认值必须是与元素的数据类型兼容的类型。以下代码...

    可以为注解中的元素定义默认值。不需要为带有默认值的注解元素提供值。

    默认值可以使用以下一般语法定义:

    @interface {

    () default ;

    }

    关键字default指定默认值。默认值必须是与元素的数据类型兼容的类型。

    以下代码通过将minor元素的默认值指定为0,来创建Version注释类型,如下所示:

    public @interface Version {

    int major();

    int minor() default 0; // zero as default value for minor

    }

    示例

    以下代码显示注解如何使用默认值。

    @Version(major=1) // minor is zero, which is its default value

    @Version(major=2, minor=1) // minor is 1, which is the specified value

    以下代码显示如何为数组和其他数据类型指定默认值:

    public @interface Version {

    double d() default 1.89;

    int num() default 1;

    int[] x() default { 1, 2 };

    String s() default "Hello";

    String[] s2() default { "abc", "xyz" };

    Class c() default Exception.class;

    Class[] c2() default { Exception.class, java.io.IOException.class };

    }

    b739ec46bb5c46d9c0aa4ce35ba1ea56.png

    展开全文
  • 转载地址:http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解...
  • 注解:元注解的作用就是负责注解...Java5.0定义的元注解:1.@Target,2.@Retention,3.@Documented,4.@Inherited这些类型和它们所支持的类在java.lang.annotation包中可以找到。下面我们看一下每个元注解的作用和...
  • Java数组

    2018-08-19 10:32:05
    一、数组: 1、定义:数组是相同数据类型的数据按顺序组成的一种引用数据类型。 2、一维数组: (1)、定义格式: int [] ageArray = {22,34,56};//存放int类型数据的数组;必须在声明的时候赋值; double [] ...
  • Java中的注解

    2021-03-09 20:45:10
    java中常见的注解@Override:作用在方法上的注解。当方法不是重写父类的方法时会报错;(这个注解可以帮我们检查覆盖是否正确。覆盖时推荐必须使用这个,增强阅读性。由于这个注解在运行时没啥作用,所以它的保留策略...
  • 本章小结了Java数组的基本语法,分享给新学习的小伙伴,分享获取新知大家一起进步。 文章目录一.引言二.数组三.数组的使用四.数组的内存分配 一.引言 回顾数据类型: (1)基本类型 byte short int long float ...
  • 比如说@Target()这个注解,它的value是一个ElementType[]类型,为什么可以这样写: @Target(ElementType.METHOD) 这样类型可以匹配上吗?这不相当于把一个元素赋给了一个数组
  • Java——自定义注解

    2021-03-18 00:09:24
    一,自定义注解类@Target({ElementType.METHOD,ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Inherited //继承对接口是无用的;继承的时候只会集成到类上面的注解,不会继承到方法上的注解@...
  • java数组查找算法实现比较

    千次阅读 2018-04-17 19:14:14
    java数组查找算法实现比较 本文我们看看java不同数组查找算法,并使用JMH(Java Microbenchmark Harness)比较它们的性能,确定最优算法。 数据准备 我们在数组中随机生成字符串用作示例数据: String[] ...
  • 集合与数组 可空性和集合 kotlin支持值为null的集合,也就是集合的类型参数支持“?”;看个例子就明白了 注意区分集合值可空,还是集合本身可空 只读集合和可变集合 Kotlin 的集合设计和 Java不同的另 一项重要...
  • (一)数组的创建数组的创建包括两部分:数组的申明与分配内存空间。int score[]=null; //申明一维数组score=new int[3]; //分配长度为3的空间数组的申明还有另外一种方式:int[] score=null; //把中括号写在数组名...
  • java中,初始化数组要求指定数组容量,但在许多情况下需要扩充数组容量。 有两种方法可以实现数组容量扩容: public class Demo1 { static int []array=new int [20]; public static void main(String[] args...
  • 一维数组遍历与求和:public class OneArry{public static void main(String[] args) {double[] num = {1.9, 2.9, 3.4, 3.5,10,-1};num[0]=new Double(2); //通过下标把1.9变为2.0double sum = 0;for (int i = 0; i ...
  • Java系列之数组

    2021-03-08 00:14:52
    本来打算温习一下注解方面的内容作为今天的推送,但是来不及写了,那就一起来看一下数组数组是用来存放一组具有相同类型数据的数据结构,通过下标来访问数组中的元素。数组的定义数组的定义主要有两种,一种是先...
  • java 课件 数组、枚举及注解 java 课件 数组、枚举及注解 java 课件 数组、枚举及注解 java 课件 数组、枚举及注解
  • } 常量Info.A和Info.B可以在注释中使用,但不能在数组Info.AB中使用,因为它必须是此位置中的数组初始值。注释值被限制为可以内联到类的字节代码中的值。这是不可能的数组常量,因为它必须构建时,信息加载。这个...
  • Java 泛型 泛型数组

    千次阅读 2021-03-09 20:43:19
    直接创建泛型数组不能通过编译,而转型对象数组通过编译但是不能在JVM运行 public class ArrayOfGeneric{static Generic[] gia;@SupperssWarnings("unchecked")public static void main(String[] args){gia = ...
  • RESTful 一种软件架构风格,设计...需要传递数组参数的情况,如果是一般的form表单,可以直接定义参数类型为List即可(不能定义为数组类型,否则只能得到一个null)。示例代码如下:@POST@Path("/user" )public Res...
  • java二维数组,有注释

    2020-10-12 20:17:50
    //案例:打印以下图形,从二维数组打印出来 //@@@@@@@@ //$$$ //##### //@@@@@@ //!!! package hehe; public class 不规则数组 { public static void main(String[] args) { // TODO 自动生成的方法存根 char[]...
  • 一、自定义注解格式、 二、注解本质分析、 三、注解属性及类型、 四、注解属性类型、 五、注解属性赋值简化操作、
  • java 对象列表转换为json对象数组,并转为字符串 JSONArray array = JSONArray.fromObject(userlist); String jsonstr = array.toSt… jsonLib 经典文章:...
  • java 自定义注解

    2020-12-21 10:31:37
    @Target(value=ElementType.METHOD) //意味着注解只能用在方法前面@Retention(RetentionPolicy.RUNTIME) //注解在运行时有效,即可以被反射读取public @interface My {//注解内包含的是参数的信息,不是方法,比如...
  • java自定义注解

    2021-03-01 09:16:33
    该功能由一个定义注解类型的语法和描述一个注解声明的语法,读取注解的API,一个使用注解修饰的class文件和一个注解处理工具组成。Annotation并不直接影响代码的语义,但是他可以被看做是程序的工具或者类库。它会反...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 104,297
精华内容 41,718
关键字:

java数组注解

java 订阅