Java如何实现自定义注解@interface

什么是注解?

注解的定义

官网描述如下:

Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Java 注解是从 Java5 开始添加到 Java 的。

将上面的话再翻译一下,如下:
(1)元数据在开发中的作用就是做数据约束和标准定义,可以将其理解成代码的规范标准(代码的模板);
(2)代码的模板(元数据)不直接影响代码的执行,它只是帮助我们来更快捷的开发;

综上,注解是一种元数据,可以将它理解为注释、解释,它为我们在代码中添加信息提供了一种形式化的方法,它用于帮助我们更快捷的写代码。

注解的分类

一般常用的注解可以分为三类:

1、Java自带的标准注解
包括@Override、@Deprecated、@SuppressWarnings等,使用这些注解后编译器就会进行检查。

2、元注解
元注解是用于定义注解的注解,包括@Retention、@Target、@Inherited、@Documented、@Repeatable 等。
元注解也是Java自带的标准注解,只不过用于修饰注解,比较特殊。

3、自定义注解
用户可以根据自己的需求定义注解。

注解的使用

使用Java自带的注解

Java 自带的注解,就是 java.lang中定义的一套注解,以Override注解为例,使用方法如下:

    @Override         //在需要注解的方法上面@Override即可
    protected void onCreate() {      
    }

常用的Java注解如下:

1、@Deprecated – 所标注内容不再被建议使用;
2、@Override – 只能标注方法,表示该方法覆盖父类中的方法;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,自定义注解是一种元数据可以用于给代码添加额外的信息。实现类似于@JsonProperty的功能,你可以通过自定义注解来指定属性在序列化和反序列化过程中的名称。 下面是一个简单的示例,展示如何使用自定义注解实现类似于@JsonProperty的功能: 首先,定义一个自定义注解@JsonField: ```java import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface JsonField { String value() default ""; } ``` 然后,在需要使用该注解的类中,使用@JsonField注解标记需要序列化和反序列化的属性: ```java public class MyClass { @JsonField("name") private String myName; @JsonField("age") private int myAge; // 省略其他代码 } ``` 接下来,你可以编写一个工具类,使用反射来读取注解并实现相应的功能: ```java import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; public class JsonUtils { public static String toJson(Object obj) { Class<?> clazz = obj.getClass(); Map<String, Object> jsonMap = new HashMap<>(); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { if (field.isAnnotationPresent(JsonField.class)) { JsonField jsonField = field.getAnnotation(JsonField.class); String fieldName = jsonField.value(); if (fieldName.isEmpty()) { fieldName = field.getName(); } field.setAccessible(true); try { Object value = field.get(obj); jsonMap.put(fieldName, value); } catch (IllegalAccessException e) { e.printStackTrace(); } } } // 将jsonMap转换为JSON字符串 // ... return jsonString; } } ``` 在上述示例中,我们使用了反射来获取类的字段,并判断字段是否被@JsonField注解标记。如果被标记,则获取注解的值作为属性的名称,并将属性的值存储在一个Map中。最后,你可以将该Map转换为JSON字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值