Scala注释实际上是什么?

Scala注释实际上是什么?,scala,annotations,Scala,Annotations,我不懂Java,我开始学习Scala。注释是什么?它们的用途是什么?注释是附加到类/方法/字段的元数据,框架可以使用它来确定围绕这些类/方法/字段所需的功能 常见用途包括: 将方法标记为单元测试方法和相关设置/拆卸方法(例如JUnit和TestNG) 为持久性标记类和字段(例如Hibernate) 标记要作为JMX bean公开的类和字段 注释是一种Java功能,因此在Scala和Java中都可用。一般来说,注释使信息与定义(例如类、方法或变量的定义)相关联成为可能。注释可以由编译器使用,也可以

我不懂Java,我开始学习Scala。注释是什么?它们的用途是什么?

注释是附加到类/方法/字段的元数据,框架可以使用它来确定围绕这些类/方法/字段所需的功能

常见用途包括:

  • 将方法标记为单元测试方法和相关设置/拆卸方法(例如JUnit和TestNG)
  • 为持久性标记类和字段(例如Hibernate)
  • 标记要作为JMX bean公开的类和字段

  • 注释是一种Java功能,因此在Scala和Java中都可用。

    一般来说,注释使信息与定义(例如类、方法或变量的定义)相关联成为可能。注释可以由编译器使用,也可以由程序的其他部分访问,例如在Java中:

    @SuppressWarnings("deprecation")
    void useADeprecatedMethod() {
        someObj.someDeprecatedMethod();
    }
    
    这里,
    @SuppressWarnings
    注释告诉编译器不要发出关于
    useADeprecatedMethod的
    使用
    someDeprecatedMethod
    的警告

    Java世界中的其他用途包括向类添加有关如何映射到关系数据库的信息,以供Hibernate或类似Hibernate的映射程序使用

    在Scala中,Java中的许多关键字或标记接口在Scala中实现为注释。e、 g.
    @throws
    @serializable

    下面是一个示例,展示了Scala和Java在注释帮助下的协同工作。假设我们要在Scala中定义一个
    Person
    类。当我们在Java中使用
    Person
    时,Java程序员会希望我们拥有
    setName
    getName
    方法,就像Java中的bean约定一样。这可以通过使用
    @BeanProperty
    注释来实现:

    Scala中的个人类:

    class Person {
      @BeanProperty
      var name = "Joe Bloggs"
    }
    
    在Java中:

    public void printPerson(Person p) {
        // Scala added the getName method for us
        System.out.println(p.getName());
    }
    

    Java注释的一个有趣方面是对其保留的控制。定义注释类型(实现
    注释
    接口的Java类)时,其属性之一是其
    保留策略
    ,以下属性之一:

    • 编译器将丢弃源注释
    • 类注释将由编译器记录在类文件中,但不需要在运行时由VM保留
    • 运行时-编译器将注释记录在类文件中,并在运行时由VM保留,因此可以反射地读取注释

    注释确实是JVM中支持的Java功能,但这并不能使它们自动成为Scala的一部分。特别是,由于您可以在Scala中注释Java中无法注释的东西,或者Java中根本不存在的东西,我非常确定Scala注释不仅仅是Java注释或JVM注释的简单1:1映射,我并没有断言存在一对一映射。但我是说Java注释在JVM中受支持,在Scala中可用。所有这些都属于这一类。