Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 注释:方法与变量_Java_Hibernate_Jpa_Jakarta Ee - Fatal编程技术网

Java 注释:方法与变量

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; } }

我一直确信(不知道为什么)最好给变量添加注释,但在浏览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 {
@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;
@独身癖
私有列表角色;
//……二传手和接球手。。。。。。。。。。
@凌驾
公共收藏这是一个复制品,我将在这里添加我的观点。