什么是Scala注释实际上?
答
注解是附加到类/方法/字段的元数据,框架可以使用它来确定围绕这些类/方法/字段的必需功能。
常见用途包括:
- 标记方法作为单元测试方法和相关联的建立/拆除(例如JUnit和TestNG的)
- 标记为持久类和字段(例如休眠)
- 标记类和字段作为JMX的豆
注解是一个Java功能,并作为斯卡拉等提供以及Java。
答
注解通常可以使信息与定义相关联,例如,类,方法或变量的定义。注释可以被编译器使用或者被程序的其他部分访问,例如在Java中:
@SuppressWarnings("deprecation")
void useADeprecatedMethod() {
someObj.someDeprecatedMethod();
}
这里,@SuppressWarnings
注释告诉编译器不会发出警告有关useADeprecatedMethod's
使用someDeprecatedMethod
。
Java世界中的其他用途包括向类中添加信息,以了解它如何映射到关系数据库以供像Hibernate这样的OR映射器使用。
在Scala中,许多Java中的关键字或标记接口都是作为Scala中的注释实现的。例如@throws
,@serializable
。
下面是一个显示Scala和Java与注释帮助一起工作的示例。想象一下,我们将在Scala中定义一个Person
类。当我们在Java中使用Person
时,Java程序员会希望我们拥有setName
和getName
方法,就像Java中的bean约定一样。
Person类Scala中:这可以通过使用@BeanProperty
注解实现
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注释的有趣的方面是对他们保留控制。当注释类型(实现Annotation
接口的Java类)被定义,它的一个属性是其RetentionPolicy
,之一:
- SOURCE - 注解是由编译器被丢弃。
- CLASS - 注解将被编译器记录在类文件中,但不需要在运行时由VM保留。
- RUNTIME - 注解将被编译器记录在类文件中,并在运行时由VM保留,因此可以反射性地读取它们。
注解是JVM中支持的Java特性,当然,但这并不会使它们自动成为Scala的一部分。 – 2010-06-20 14:56:30
特别是,由于您可以在Scala中注释您无法用Java注释或者甚至不存在Java中的东西,所以我非常肯定Scala Annotations不仅仅是一种简单的1:1映射到Java注释或JVM注释。 – 2010-06-20 15:01:15
我并没有断言有一对一的映射。但是我*说* JVM支持Java注释,并且可以在Scala中使用。以上所有内容都适用于该类别。 – 2010-06-20 16:23:39