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

在Java中使用默认值创建注释实例

洪弘壮
2023-03-14
问题内容

如何创建以下注释的实例(所有字段均设置为其默认值)。

    @Retention( RetentionPolicy.RUNTIME )
    public @interface Settings {
            String a() default "AAA";
            String b() default "BBB";
            String c() default "CCC";
    }

我试过了new Settings(),但这似乎不起作用…


问题答案:

您无法创建实例,但至少要获取默认值

Settings.class.getMethod("a").getDefaultValue()
Settings.class.getMethod("b").getDefaultValue()
Settings.class.getMethod("c").getDefaultValue()

然后,可以使用动态代理返回默认值。据我所知,这也是Java本身处理批注的方式。

class Defaults implements InvocationHandler {
  public static <A extends Annotation> A of(Class<A> annotation) {
    return (A) Proxy.newProxyInstance(annotation.getClassLoader(),
        new Class[] {annotation}, new Defaults());
  }
  public Object invoke(Object proxy, Method method, Object[] args)
      throws Throwable {
    return method.getDefaultValue();
  }
}

Settings s = Defaults.of(Settings.class);
System.out.printf("%s\n%s\n%s\n", s.a(), s.b(), s.c());


 类似资料:
  • 问题内容: 我知道SO和网络上都有很多这些问题,但是所有答案都建议使用特定于数据库的信息,因此不适用于我,因为我正在使用的系统需要在不同的数据库上运行。 我发现这个hibernate问题,有人要求使用此功能进行注释。该问题已经解决,表示另一个问题将涉及该功能。第二个问题显然添加了注释以及其他一些注释,但是我找不到有关如何使用这些新注释定义默认列值的文档。 所以我的问题是:有谁知道我该如何定义带注释

  • 我在互联网上搜索过,看到了关于在mysql中使用Hibernate注释在实体类中设置默认值的想法,我已经完成了将默认值设置为具有数据类型整数的列,如下所示。 而且工作得很好。 但是我没有看到任何varchar/string数据类型的示例,我尝试了columnDefinition中的不同类型,比如, 使用“长度”属性:- 等等。 但在这种情况下,表不是由hibernate创建的,这可能是由于语法错误

  • 我使用一个库,它提供了一个带有布尔参数的注释。默认设置为由库的作者设置。 不幸的是,在我几乎所有的用例中,我更喜欢使用的注释。为了实现所需的行为,我每次都使用而不是。这很容易出错,因为人们很容易忘记设置参数。 我想知道是否有一种方法可以简化事情,通过改变的参数的默认值,或者通过定义一个自定义的注释,其行为类似于,但不需要设置参数。 (在这个特定的情况下,库是lombok,但是这个问题可能与任何库提

  • 如果我在spring的控制器中有一个映射,比如: 我可以做一个注释,并将默认值10封装在上面吗?比如: 让spring像预期的那样理解我的注释。我发现https://stackabuse.com/spring-annotations-requestmapping-and-its-variants/当我看到他们用@GetMapping、@PostMapping等工具所做的事情时,我有点满怀希望。 但

  • 我知道DateTimeFormat注释可以在Spring中的模型类的日期属性上定义,但是有没有任何方法可以为Spring模型类中的所有日期定义一个默认的DateTimeFormat注释呢? @DateTimeFormat(pattern=“MM/DD/YYYY”) 私人日期DeliveryDate; 它将使我不必对每个日期字段进行注释。它还将使我更容易更改应用程序宽日期格式以后。

  • 问题内容: 我正在尝试执行此操作,但是MySQL似乎不允许我这样做。是否有解决此问题的方法,或者我希望总是在我的INSERT查询中包括该函数? 我知道可以接受CURRENT_TIMESTAMP缺省值的TIMESTAMP类型,但是我的客户端坚持使用数据库中的纪元时间。 问题答案: MySQL实现数据类型的方式,实际上是将纪元时间存储在数据库中。因此,如果您想将其显示为int,则可以使用默认值为的列并