实际上Scala注释是什么?

时间:2010-06-20 14:39:07

标签: scala annotations

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

3 个答案:

答案 0 :(得分:7)

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

常见用途包括:

  1. 标记方法作为单元测试方法和相关的设置/拆除(例如JUnit和TestNG)
  2. 标记持久性的类和字段(例如Hibernate)
  3. 标记要作为JMX bean公开的类和字段
  4. 注释是一种Java功能,因此可以在Scala和Java中使用。

答案 1 :(得分:5)

通常,注释可以将信息与定义相关联,例如类,方法或变量的定义。注释可以由编译器使用,也可以由程序的其他部分访问,例如:在Java中:

@SuppressWarnings("deprecation")
void useADeprecatedMethod() {
    someObj.someDeprecatedMethod();
}

此处,@SuppressWarnings注释告诉编译器不要发出关于useADeprecatedMethod's使用someDeprecatedMethod的警告。

Java世界中的其他用途包括向类添加有关如何映射到关系数据库以供OR映射器(如Hibernate)使用的信息。

在Scala中,Java中的关键字或标记接口等许多内容都是作为Scala中的注释实现的。例如@throws@serializable

这是一个示例,显示Scala和Java与注释的帮助一起工作。想象一下,我们将在Scala中定义一个Person类。当我们在Java中使用Person时,Java程序员将期望我们拥有setNamegetName方法,就像Java中的bean约定一样。这可以使用@BeanProperty注释:

来实现

Scala中的Person类:

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());
}

答案 2 :(得分:3)

Java注释的一个有趣方面是控制其保留。当定义注释类型(实现Annotation接口的Java类)时,其属性之一是RetentionPolicy,其中一个:

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