2011-12-12 53 views
1

我明白这个答案可能是“一致的”,但我想知道是否有添加适用于字段/方法的字段或方法的注释的优点。例如,是否有任何好处:我应该在哪里放置字段/方法注释?

@XmlElement 
private String str; 

public String getString() { 
    return str; 
} 

过来:

private String str; 

@XmlElement 
public String getString() { 
    return str; 
} 

感谢。

+0

这取决于你的库支持。如果你可以做任何一件事,它通常会在文档中提出什么建议? –

回答

3

它取决于在编组或解组操作期间您想要执行的get/set方法中是否存在逻辑。

实施例#1 - JPA实体

一些JPA实现在代码使用字节码操作,以“编织”的吸气剂来进行迟缓装载。如果您将这种类型的模型映射到XML,那么您将需要注释getter以确保调用get方法的逻辑。

例2 - 不匹配的get/set方法

在用户下面的答案有不符合规定的豆访问方法。对于那个用例,我建议使用字段访问。

示例#3 - 只读属性

如果你的对象模型具有一个getter,但没有setter属性,然后现场访问是有益的。

更多信息

+0

感谢这个答案,它肯定突出了我甚至没有考虑过的一些观点。 – DaveRlz

0

这取决于你在做什么。例如:您的xml序列化器/转换器使用getter或直接读取字段?

  1. 如果它使用getter,请标记getter,因为您可以使用任何后退逻辑来获取getter,而不仅仅是后场。
  2. 如果它直接读取该字段,请标记该字段,因为get对该功能无用。吸气剂可能在未来发生变化,但该领域不会也不能改变。
0

在第一种情况下,对标注元素的访问将使用反射来执行,因为该字段是私人的。这可能会导致性能下降(要在真实案例中检查)。

在第二种情况下,将使用getter/setter执行访问。

在Hibernate中,例如,注释的私人属性可以创建只读真正属性:

@Id 
private int id; 

// No setter so it cannot be changed without reflexion 
public int getId() { 
    return id; 
} 

。另一方面,诠释着存取会给你机会做不仅仅是设置更多/获取属性。

+1

注解吸气剂/注射器时仍可能使用反射。 –

0

好处依赖于注释代表什么。

  1. 许多框架允许字段/方法注释相互补充,如Spring框架中的setter注入。有场注释可以让你决定是否应该出席二传手。

  2. 其他注释处理器可能根据注释的方法或字段是否触发不同的行为。例如,可以将安全注释放在对该方法的方法控制授权上,而字段注释可以控制对引用该变量的所有例程的授权。

但一般在我看来,选择最有可能是偏好,或风格的,如果你想。

相关问题