什么是更好的解决方案?
我在想,什么是性能上更好,或者哪个更“正确”?
public static List<String> globalUseVariable;
或
private static List<String> globalUseVariable;
public static List<String> getGlobalUseVariable() {
return globalUseVariable;
}
我认为第二个是因为封装规则?
哪个更「正确」?
按照你的准则,我都不同意。将列表
标记为私有
,然后在一个方法中返回对同一列表的引用,您将一无所获。您不能调用此封装,因为无论您在方法中添加什么逻辑,您都会将<code>列表</code>引用返回给调用方,以便调用方可以随意修改。如果要真正遵守封装,至少可以要求方法返回不可修改的集合(使用
Collections.unmodifiableList
)。
如果您希望您的列表是< code>public
,您至少可以将它标记为< code>final,这样您的类之外的代码就不能尝试类似于< code > your class . global use variable = null 的操作,也不能破坏任何使用< code>List的代码。
建议使用 getters,因为您可能希望在不更改 API 的情况下对类进行更改,或者您将决定在返回列表之前执行某种转换。看看这个关于类似情况的答案。在我看来,同样的原则通常适用于静态场,实际上没有理由为它们破例。这个问题也触及了同一个话题。我认为这里概述的原因也适用于静态场,并且是完全合理的。
一般来说,如果你把某个东西变成公共的,你就创建了一个公共的API,并且应该保证它不太可能为了避免以后的大麻烦而改变(如果你正在创建一个公共库并且必须是向后兼容的,那么改变甚至是不可能的)。
此外,通过使用getter和setter,您可以确保编写的代码是线程安全的,如其他答案和链接问题中所述。当您公开公共字段时,您对此无能为力。
简单来说:
拥有一个公共可写字段几乎是不行的。如果允许多个组件更新该数据,则会导致直接的硬耦合。这也意味着您可以(最有可能)对线程安全说“再见”。即使你认为“我今天只会读那个领域”;也许你会在几周内忘记这一点。或者你团队中的其他人错过了这一部分。所以
因此,如果您有充分的理由向“公众”提供一些数据;然后至少使用getter方法;因为这允许(以后)更改。或者它允许简单的增强功能,例如返回内部状态的副本/克隆(以防止“局外人”以后操纵该内部状态)。
绕过静电的两种方法:
通过遵循方法2,您可以获得具有相同功能的东西(您有一个所有代码都可以使用的“全局”东西);但是你让事情更加解耦;最重要的是:您可以在任何地方进行合理的单元测试。
静态通常是合理单元测试的“杀手锏”。
问题内容: 和之间有什么区别? 例如 : 要么 问题答案: 尽管您 确实 希望遵守约定,但在功能上没有什么区别(字节码将 完全相同 ),请访问JLS-8.3.1。场修饰符: __ 这将是奇怪的,看.. 我也建议您访问checkstyle。 编辑: 从同一页面链接到该部分: http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls
例如: 或
问题内容: 此Java程序包含一个静态变量。但是我无法理解公共静态变量和私有静态变量之间的区别。 问题答案: 公共变量可在代码中的 任何 位置访问- 私有变量仅可在类本身内部访问。在这种情况下,您可以在类中使用它,所以很好。 请注意,静态变量是完全独立的问题-方法和类具有与变量相同的可访问性。 还有其他级别的访问权限- 和默认的“包”访问权限(无法明确指定)。有关更多详细信息,请参见Java语言规
这个java程序包含一个静态变量。但是我不明白公共和私有静态变量之间的区别。
我有一个关于静态方法访问的问题。我有一个类,其中有4个静态方法。如代码所示: } 我正在从下面的代码调用来自onLoadShipperDetailsListCtrl()的setSortingEnable()方法: } 因此,如果我从其他类调用setSortingEnabled()方法,我会认为它是公共的,而其他方法是私有的,但它会给我一个错误:Java . lang . nosuchmethode
本文向大家介绍静态和动态多态性有什么区别?,包括了静态和动态多态性有什么区别?的使用技巧和注意事项,需要的朋友参考一下 多态是对象采取多种形式的能力。当使用父类引用来引用子类对象时,会在OOP中最常见地使用多态。被子类覆盖的方法称为运行时多态。JVM确定要在运行时而不是编译时执行的方法。在参数不同的同一类中,方法重载是静态多态的一个示例,编译器在编译时就知道要执行哪种方法。