当前位置: 首页 > 面试题库 >

创建自定义注释

宰父君昊
2023-03-14
问题内容

注释如何与Java一起使用?以及如何创建这样的自定义注释:

@Entity(keyspace=':')
class Student
{
  @Id
  @Attribute(value="uid")
  Long Id;
  @Attribute(value="fname")
  String firstname;
  @Attribute(value="sname")
  String surname;

  // Getters and setters
}

基本上,我需要保留的POJO在持久化时像这样进行序列化:

dao.persist(new Student(0, "john", "smith")); 
dao.persist(new Student(1, "katy", "perry"));

这样,实际的生成/持久对象是Map<String,String>这样的:

uid:0:fname -> john
uid:0:sname -> smith
uid:1:fname -> katy
uid:1:sname -> perry

任何想法如何实现这一点?


问题答案:

如果创建自定义注释,则必须使用此处的Reflection
API
示例进行处理。您可以参考如何声明注释。
这是Java中的示例注释声明的样子。


import java.lang.annotation.*;

/**
 * Indicates that the annotated method is a test method.
 * This annotation should be used only on parameterless static methods.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Test { }

Retention并被Target称为meta-annotations

RetentionPolicy.RUNTIME 表示您想在运行时保留注释,并且可以在运行时访问它。

ElementType.METHOD 表示您只能在方法上声明注释,类似地,您可以为类级别,成员变量级别等配置注释。

每个Reflection类都有获取声明的注释的方法。

public <T extends Annotation> T getAnnotation(Class<T> annotationClass) getAnnotation(Class<T> annotationClass)
Returns this element's annotation for the specified type if such an annotation is present, else null.

public Annotation[] getDeclaredAnnotations()
Returns all annotations that are directly present on this element. Unlike the other methods in this interface, this method ignores inherited annotations. (Returns an array of length zero if no annotations are directly present on this element.) The caller of this method is free to modify the returned array; it will have no effect on the arrays returned to other callers.

你会发现这些方法的介绍FieldMethodClass类。

例如在运行时检索指定类上存在的注释

 Annotation[] annos = ob.getClass().getAnnotations();


 类似资料:
  • 我在代码中使用Lombok自动生成getter和setter代码。我想添加其他个人注释并使用它。 例如,我想添加一个方法来验证列表中是否存在一个键: 创建注释后,我将执行以下操作:

  • 问题内容: 一个项目需要大量使用以下Jackson注释组合。因此,有没有一种方法可以创建另一个注释来避免丑陋的复制/粘贴: 更新: 我已经尝试过了,但是没有成功:-( 问题答案: 使用解决问题:

  • 问题内容: 我用我的代码自动生成和代码。我想添加其他个人并使用它。 例如,我想添加一个方法来验证列表中键的存在: 创建注释后,我将只需要执行以下操作: 问题答案: 一般注意事项 如果您已经在使用Lombok,则可以添加自定义Lombok转换批注和处理程序。 使用和定义存在注释 创建一个处理程序 public class HandleExists extends JavacAnnotationHan

  • 我想用java为创建自定义注释。我想用这个注释比较两个字符串值,比较后会返回一个

  • 问题内容: 我在Django中启用了用户身份验证模块,但是当我使用它时,它仅询问用户名和两个密码/密码确认字段。我还希望将电子邮件和全名字段全部设置为必填字段。 我已经做到了: 现在,该表单显示了新字段,但是没有将它们保存到数据库中。 我怎样才能解决这个问题? 问题答案: 用户模型中没有调用此字段。 如果要使用原始模型存储名称,则必须将其分别存储为名字和姓氏。 编辑: 如果您只希望表单中的一个字段

  • 我正在使用helm charts创建部署微服务,通过执行helm create创建包含部署、服务和入口的基本图表,但我没有其他配置,如水平pod自动缩放器、pod中断预算。