为什么要为不可变类型将static final
变量声明为private
?
在任何情况下声明public
都可能会造成任何伤害吗?
答案 0 :(得分:3)
因此,没有人可以从外部访问它并依赖于该值,让您可以自由地进行更改而不会产生副作用(至少在声明它的类之外)。
答案 1 :(得分:3)
有几个原因......
隐私强>
保持对客户端隐藏实现细节,例如仅供内部使用且不使用客户端的常量
安全强>
保护您的代码免受恶意客户端代码的侵害,例如:
static class A
{
public final static List<String> list = buildList();
public static List<String> buildList()
{
ArrayList<String> list = new ArrayList<>();
list.addAll(Arrays.asList("A", "B", "C"));
return list;
}
}
static class B
{
public static void main(String[] args)
{
A.list.clear();
System.out.println(A.list);
}
}
你不希望任何人操纵你的内部数据。
答案 2 :(得分:0)
将变量保持在适当的范围内是最好的OOP实践。一个例子是全局静态最终整数,用于在类中执行多个计算。暴露(公开)不仅可能导致问题,而且可能造成混乱。
假设您有一个课程,您需要知道pi的值:
public class MyClass {
private static final double PI = 3.14159;
//functions performing calculations with value of PI
}
pi的值仅在MyClass
内需要,因此将其暴露是没有意义的 - 所有使用变量的计算都在MyClass
内完成。如果再次需要它来执行计算,则应该在保持值的类中进行计算。
答案 3 :(得分:0)
public class GUICommon {
private static final ExecutorService executorServices = Executors.newWorkStealingPool();
public static void useExecutors(Runnable run)
{
executorServices.execute(run);
}
}
我以这种方式使用它。
答案 4 :(得分:-2)
static修饰符与final修饰符结合使用,也用于定义常量。最终修饰符表示此字段的值不能更改。
https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html
如果使用public声明静态final变量,该变量将能够看到站点的类。如果有人试图在其他类中更改其值,则可能在编译时导致潜在的错误。
如果使用private声明静态final变量,则隐藏在其他类中。所以你可以避免这样的错误。