在单身人士中,使用
有哪些缺点和优点private static final String QUERY = "some valid query";
在
private final String QUERY = "some valid query";
答案 0 :(得分:1)
在您的情况下,您有一个不可变对象。
声明final String s = "foo";
或static final String s = "foo";
并没有太大变化,因为这是一个常量。它永远不会改变
常识告诉我将其设置为static
以限制创建的实例数。 (请注意,由于字符串池,仍然只能创建一个String
如果你要求可变对象,这是不同的。例如,List
声明它final
只会阻止您稍后重新初始化该变量,但不会阻止内容更改。
private static final List<String> list1 = new ArrayList<>();
private final List<String> list2 = new ArrayList<>();
这将给出两个列表,一个对每个实例(static
)都是通用的,另一个是实例的成员。
list1.add("foo");
将在String
中添加list1
,可从任何
list2.add("foo");
只会为一个实例添加String
。
在这种情况下,声明它static
会产生影响。
实例成员的每个点都是基于在声明期间初始化的变量完成的,而不是在构造函数中完成的。
private final String s;
public MyClass(String s){
this.s = s;
}
这种情况不同,因为这不是常量,每个实例将使用不同的String
值。
答案 1 :(得分:0)
使用Spring视角,大多数豆子都是单身,没有区别。另一点是,您应该编写非特定于框架的代码,然后是最佳实践。 Spring是java,但java不是Spring(我希望你能理解)。
答案 2 :(得分:0)
“静态最终”方法做了一些事情。
这是一种非常常见的方法,有些地方是最好的替代方法,例如为类创建Logger实例。至于String常量。
在您的情况下,String interning将导致运行时只创建一个将由包含类的每个实例引用的String实例,并且对于单例,只有一个容器实例。因此,没有性能优势。
话虽如此,使用常量被认为是最佳实践。