![]() |
1
4
定义没有不同。中的定义
中的定义
在里面
事实上
至于副作用-假设
如果你使用了这个,那么没有两个实例会被认为是相同的。尽管它们的字段中具有相同的值,并且在语义上表示相同的行为类型,但您将无法创建与前一个实例等效的第二个Annotation实例。因此,当两个项目具有不同的注释时,您无法判断它们是否使用相同的注释进行注释 实例 同一注释。
至于
基本上,注释的实现是留给编译器的,而JLS并不规定具体的实现。正如您的问题本身所提到的,也可以创建实现类。
这意味着注释类可以来自不同的源-不同的编译器(您应该能够运行
这个
然而,在这种特殊情况下,您有一个接口,需要使equals()和hashcode()不仅适用于同一类的两个实例,而且适用于实现同一接口的不同类的实例。这意味着,如果您不同意所有可能的类中的一个实现,那么可能会得到具有相同元素值和不同哈希代码的同一注释的两个实例。这将打破
例如,想象一个注释
|
![]() |
2
2
Real怀疑论者的回答很好,但我会用稍微不同的方式来回答。 这是一个一般问题的具体实例:
所以,是的,你会比其他任何事情都更经常遇到注释,但每当你试图与自己无法控制或使用的实现保持一致时,这些都很重要。 |
![]() |
3
0
上面的答案是这个问题的很好的一般答案,但由于我没有看到它们被提及,我只想补充一点,使用AnnotationLiteral实现Annotations可以适当地处理equals和hashCode问题。有两种可供选择: |
![]() |
Joy · 在Guice中编写Map注入的单元测试 7 年前 |
![]() |
AnthonyC · 休眠和Guice,无需持久性。xml 7 年前 |
![]() |
Andrei Koch · Guice辅助注射 7 年前 |
|
Prashant · 来自消费者软件包的Guice绑定 7 年前 |
|
user212926 · Guice Injector保持应用程序运行 8 年前 |