Java 如何避免;“气味代码”;当使用@NamedEntityGraphs注释时?
在IntellyJ Idea中,我安装了Sonarint 代码分析器说我必须从这个注释组中删除“NamedEntityGraphs”包装器。 这是我的密码:Java 如何避免;“气味代码”;当使用@NamedEntityGraphs注释时?,java,jpa,spring-data-jpa,annotations,entitygraph,Java,Jpa,Spring Data Jpa,Annotations,Entitygraph,在IntellyJ Idea中,我安装了Sonarint 代码分析器说我必须从这个注释组中删除“NamedEntityGraphs”包装器。 这是我的密码: @NamedEntityGraphs({ @NamedEntityGraph( name = Application.ONLY_NAME, attributeNodes = { @NamedAttributeNod
@NamedEntityGraphs({
@NamedEntityGraph(
name = Application.ONLY_NAME,
attributeNodes = {
@NamedAttributeNode("foo"),
@NamedAttributeNode("bar")
}
),
@NamedEntityGraph(name = Application.FULL,
attributeNodes = {
@NamedAttributeNode("foo"),
@NamedAttributeNode("bar"),
@NamedAttributeNode("buzz")
}
)
})
public class SomeClass { ... }
以下是Sonarint的参数:
注释重复不应被包装
代码气味,小调,java:S1710
在Java8之前,如果需要使用同一注释的多个实例,则必须将它们包装在容器注释中。在Java8中,这不再是必需的,允许更干净、更可读的代码。
请注意,当项目的sonar.java.source低于8时,此规则将自动禁用
不遵从代码示例
兼容解决方案
问题:
enybody是否知道如何组织@NamedEntityGraphs以获得complient代码?只需按照工具告诉您的操作(以及注释中的@Slaw):删除外部注释并重复即可
您已经在代码本身中给出了答案。 只需删除
@NamedEntityGraphs
@NamedEntityGraph(name = Application.ONLY_NAME,
attributeNodes = {
@NamedAttributeNode("foo"),
@NamedAttributeNode("bar")
}
)
@NamedEntityGraph(name = Application.FULL,
attributeNodes = {
@NamedAttributeNode("foo"),
@NamedAttributeNode("bar"),
@NamedAttributeNode("buzz")
}
)
public class SomeClass { ... }
为什么不删除
@NamedEntityGraphs
,因为正如您的工具所指出的,它是不必要的?@NamedEntityGraph
注释是可重复的。
@SomeAnnotation(..a..)
@SomeAnnotation(..b..)
@SomeAnnotation(..c..)
public class SomeClass { ... }
@NamedEntityGraph(
name = Application.ONLY_NAME,
attributeNodes = {
@NamedAttributeNode("foo"),
@NamedAttributeNode("bar")
}
),
@NamedEntityGraph(name = Application.FULL,
attributeNodes = {
@NamedAttributeNode("foo"),
@NamedAttributeNode("bar"),
@NamedAttributeNode("buzz")
}
)
public class SomeClass { ... }
@NamedEntityGraph(name = Application.ONLY_NAME,
attributeNodes = {
@NamedAttributeNode("foo"),
@NamedAttributeNode("bar")
}
)
@NamedEntityGraph(name = Application.FULL,
attributeNodes = {
@NamedAttributeNode("foo"),
@NamedAttributeNode("bar"),
@NamedAttributeNode("buzz")
}
)
public class SomeClass { ... }