gpt4 book ai didi

java - 如何理解java中的注释以及如何在java中实现我的注释?

转载 作者:行者123 更新时间:2023-12-01 09:10:05 25 4
gpt4 key购买 nike

我所知道的是:

  • java 5 添加了注解
  • 注解可以用在方法、类和属性中
  • 注释可以在 RUNTIME、CLASS、SOURCE 中使用(我不知道如何使用 CLASS 和 SOURCE,以及​​它们的功能)
  • 保留注解,即RUNTIME,可以在java程序运行时实现。

我想实现一个具有以下功能的注释:

  • 确保只允许类创建实例
  • 确保只允许方法访问类中的方法
  • 就像 C++ 中的 friend
  • 它与 public 和 private 相同,但更动态,例如

    @MyAnnotation(allowMethods={xxx.doSomething})
    公共(public)无效 getValue(){}

    getValues方法只能在实例self和xxx.doSomething()方法中访问

接下来我应该做什么和学习什么?

我可以在哪里了解这些?

最佳答案

我认为您可能误解了其中的某些内容。注释是描述性元素,而不是程序的一部分。您可以编写任意数量的注释,而使用您代码的人仍然可以忽略它们。

也就是说,强制执行策略的注释(就像您的注释一样)实际上可以在编译时或运行时实现,但您需要一个外部机制来帮助您。我能想到3:

  1. Annotation processing允许您通过生成代码或忽略编译器错误来与编译器交互并处理注释。不幸的是,我认为它不适用于您的情况,因为您想保护带注释的类型免遭实例化,这意味着调用站点实际上没有注释。注释处理只能让您访问具有注释的实际代码片段,而不能访问引用它们的代码片段。
  2. AspectJ允许您基于静态切入点编写策略执行方面并忽略编译器错误。这里的问题是静态切入点的语义非常有限,因此虽然您可以完全禁止类的实例化,或者禁止从某些包中实例化,但您不能将类实例化限制为 1。
  3. 第三种方法,可能也是唯一明智的方法是使用 Spring 或 Guice 等容器并将类配置为单例。只要您只从容器中检索您的类,它就永远不会创建第二个实例。

最后:如果你想限制你的类的实例化数量,你总是可以使用经典的 Singleton pattern approach .

关于java - 如何理解java中的注释以及如何在java中实现我的注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40971858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com