调用静态方法后重用类

时间:2011-08-01 11:01:25

标签: java static static-methods method-chaining

假设我有一个包含多个静态void方法的类,例如:

class MyClass {
    public static void doJob() {
        // ...
    }
    public static void doSmthElse() {
         // ...
    }
}

如何修改它以调用我的静态方法:

MyClass.doJob().doSmthElse().doJob();

而不是

MyClass.doJob();
MyClass.doSmthElse();
MyClass.doJob();

我知道如何使用非静态方法(只返回这个),但是如何使用静态字段呢?

4 个答案:

答案 0 :(得分:8)

嗯,你可以这样做:

// Horrible, don't do it!
class MyClass {
    public static MyClass doJob() {
        // ...
        return null;
    }
    public static MyClass doSmthElse() {
        // ...
        return null;
    }
}

此时您的代码将编译,因为Java允许访问静态方法“via”引用。您返回null的事实无关紧要,因为编译器只会查看表达式MyClass.doJob()编译时类型,以便找出doSmthElse()方法打电话然后将调用静态方法而不检查返回值。

但是请不要这样做 - 这是一个非常令人讨厌的代码味道,因为你的代码看起来像是在做一件事,而实际上正在做另一件事。

选项:

  • 忍受更详细的电话
  • 将静态方法提取到一个类中,使它们成为实例方法(这可能会提高可测试性等)。
  • 静态导入方法
  • MyClass中创建一个更大的方法,逐个调用这三种方法。

答案 1 :(得分:1)

您可以创建类的虚拟实例并返回this。您将使用类的静态成员,但返回对常规实例的引用(仅用于乐趣,仅用于代码样式)。但我不想使用这种方法。

class MyClass {

    private static int data = 0;
    private static MyClass link = null;

    public static void doJob() {
        // do job with static data such as "data"
        return checkMe();
    }

    public static void doSmthElse() {
        // do someting else with static data such as "data"
        return checkMe();
    }

    private MyClass static void checkMe() {
        if (link == null) link = new MyClass();
        return link;
    }

}

答案 2 :(得分:1)

您可以将此课程设为单身,然后执行

return getInstance();

在每种方法中

答案 3 :(得分:0)

这是不可能的,因为没有对象可以返回。