类设计,静态方法的案例

时间:2014-05-14 07:44:24

标签: java oop static-methods design-principles instance-methods

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

class dummy{
    String name;
    String content;

    String someRandomOpeation(){
       ....
    }

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

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

  

是否可以获得一个名称和内容的密钥,而不是   必须创建一个有效的实例才能拥有静态方法。

没有。在这种情况下,你几乎不需要一个课程。您始终可以将数据成员传递给类方法,但这并不意味着我们不需要类。

还有一个参数 - 封装。如果没有参数的实例方法getKey()并隐藏实现细节,那就更清楚了。

  

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

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

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

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

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

我认为你的思维方式是面向功能而不是面向对象。我认为你需要一个“点击”,这将有助于你理解对象和类的正确目的和意义。