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