0

我讨论了静态方法的用法,简单来说,参数是在下面的场景中,类定义应该有一个静态方法还是实例方法。有一个类定义了一个实体,即它的属性是什么以及允许对其进行哪些操作。

class dummy{
    String name;
    String content;

    String someRandomOpeation(){
       ....
    }

    static String createKey( String inputName, String inputContent ){
       return inputName+inputContent;
    }
}

类定义还有一个静态方法,它接受一些参数(比如内容和日期,它在逻辑上定义了一个实例)并使用它来构造一个键(一个字符串)并返回相同的值。现在,如果创建消息的实例,它将具有内容和日期作为字段。参数是我可以获得一个给定名称和内容的键,而不必创建一个有效的实例来拥有静态方法。或者,一对名称和内容在逻辑上定义了一个实例这一事实是否表明要创建一个实例并从中获取一个密钥?

4

3 回答 3

0

仅仅因为您不希望实例化而将方法设为静态不是一个有效的论点。根据设计,我们在 helper/util 类中使用静态方法,这些方法可能有也可能没有自己的任何属性。这些类基本上有助于执行许多不同类可以使用的一些常见操作。此外,这些函数是如此模块化,以至于它们只使用传递给函数的参数来导出输出。

您提到的类将不起作用,因为您无法在 JAVA 中对非静态字段常量进行静态引用。

于 2014-05-14T07:56:57.650 回答
0

参数是我可以获得一个给定名称和内容的键,而不必创建一个有效的实例来拥有静态方法。

不。在这种情况下,您几乎根本不需要上课。您总是可以将数据成员传递给类方法,但这并不意味着我们不需要类。

还有一个额外的论点——封装。拥有一个不带参数的实例方法 getKey() 并隐藏实现细节会更加清晰和美好。

或者,一对名称和内容在逻辑上定义了一个实例这一事实是否表明要创建一个实例并从中获取一个密钥?

也没有。事实本身并不意味着您应该创建一个实例。

这里的第一个问题是我们是否需要一个类。我们真的有一些有意义的对象,某物的实例(虚拟)吗?例如,如果我有一个图书馆,那么拥有一本书显然是有意义的,因为我周围有很多书。你有这样的情况吗?此键是否与任何实例(此处为虚拟)在逻辑上相关联,作者和 ISBN 在逻辑上与一本书相关联?这个概念(虚拟)的实例是否与其他一些概念有关系?就像一本书可以出租。如果这些答案中的大多数是肯定的 - 那么这个方法应该是没有参数的实例方法。

或者......您可能只需要一种从 2 个字符串计算密钥的“服务”吗?这就是你所需要的吗?您是否需要其他一些类似的“服务”,独立于实例。如果这些答案大多是“是”,那你甚至不需要上课。或者你可以有一个类“服务”,没有属性,并且有这个静态方法和参数(可能还有其他方法)。

也有混合的情况。您仍然需要实例用于其他目的,但您还需要一个完全独立于任何实例的 createKey 方法,并且只提供一些与类逻辑相关的全局服务。那么静态方法就有意义了。

我认为您的思维方式是面向功能而不是面向对象的。我认为您需要在脑海中“点击”一下,这将帮助您理解对象和类的正确目的和含义。

于 2014-05-14T11:59:40.030 回答
0

此外,使用与其类字段严格关联的静态方法的缺点是您无法覆盖它们。

于 2014-05-14T07:59:57.663 回答