Java 注释:方法与变量
我一直确信(不知道为什么)最好给变量添加注释,但在浏览Hibernate文档时,我注意到他们倾向于对方法进行注释。所以我应该把注释放在方法之前,比如:Java 注释:方法与变量,java,hibernate,jpa,jakarta-ee,Java,Hibernate,Jpa,Jakarta Ee,我一直确信(不知道为什么)最好给变量添加注释,但在浏览Hibernate文档时,我注意到他们倾向于对方法进行注释。所以我应该把注释放在方法之前,比如: @Entity public class Flight implements Serializable { private long id; @Id @GeneratedValue public long getId() { return id; } public void setId(long id) { this.id = id; } }
@Entity
public class Flight implements Serializable {
private long id;
@Id @GeneratedValue
public long getId() { return id; }
public void setId(long id) { this.id = id; }
}
@Entity
public class Flight implements Serializable {
@Id @GeneratedValue
private long id;
public long getId() { return id; }
public void setId(long id) { this.id = id; }
}
还是这样做更好:
@Entity
public class Flight implements Serializable {
private long id;
@Id @GeneratedValue
public long getId() { return id; }
public void setId(long id) { this.id = id; }
}
@Entity
public class Flight implements Serializable {
@Id @GeneratedValue
private long id;
public long getId() { return id; }
public void setId(long id) { this.id = id; }
}
或者可能没有区别?对于
@Id
注释,有一个区别:如果在getter上,Hibernate尝试通过其常规getter/setter获取/设置所有类成员,而如果在成员变量上,Hibernate将直接访问所有成员变量
换句话说,不能在同一实体内混合样式。这取决于注释
一般来说,如果实体具有与字段名匹配的标准getter/setter,则没有多大区别。如果有选择的话,我倾向于对字段进行注释,只是因为我发现用方法隐藏注释更难阅读 正如佩特所指出的,您需要选择一种样式并坚持使用它,因为
@Id
注释所采用的样式将用于所有内容
除此之外,这只是口味的问题。两种选择都有效,所以选择你喜欢的。有些人更喜欢Hibernate通过方法进行注入,以便在需要时可以微妙地更改实现。我更喜欢通过字段进行注入,因为我发现在99.9%的情况下,必须通过getter/setter方法(7行vs 1行)公开所有属性是很麻烦的,因为它们将作为简单变量工作(并且在任何情况下,如果/当我仍然需要编写自定义setter功能时,我可以切换注释样式)
两者之间没有性能或功能上的差异,所以选择您喜欢的(或者更重要的是,选择您的团队/工具喜欢的)。有时可以方便地选择放置它们的位置,尤其是当字段未公开时。私有getter/setter并不常见,因此能够在字段中添加注释是很有用的 有时,它还提供了一些灵活性来处理外部/内部数据表示。下面是一个有点傻的例子,但我已经使用过类似的技巧好几次了(而且):
一般来说,我倾向于将它们放在字段中,我发现代码更具可读性。但这主要是一个品味的问题。唯一需要执行的规则就是保持一致 是的,我反对过多地注释东西。当你在做反射或类似的事情时,这很好,但我不认为有人仅仅因为有人想用注释代替注释就想阅读注释 我强烈建议在变量上使用注释,而不是在方法上使用注释。这不是口味的问题。如果要声明实现SpringSecurity中UserDetails的用户类,则必须执行此操作。 所以下面的代码可以工作,这是唯一的方法
@Entity
class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToMany
private List<UserRole> roles;
//....Setters and Getters..........
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return null;
}
@Override
public boolean isAccountNonExpired() {
return false;
}
@Override
public boolean isAccountNonLocked() {
return false;
}
@Override
public boolean isCredentialsNonExpired() {
return false;
}
@Override
public boolean isEnabled() {
return false;
}
@实体
类用户实现UserDetails{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
@独身癖
私有列表角色;
//……二传手和接球手。。。。。。。。。。
@凌驾
公共收藏这是一个复制品,我将在这里添加我的观点。