0

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

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

如何修改它以调用我的静态方法,如下所示:

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

代替

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

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

4

4 回答 4

8

好吧,你可以这样做:

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

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

但是请不要这样做 - 这是一种非常讨厌的代码气味,因为您的代码看起来像是在做一件事,而实际上它正在做另一件事。

选项:

  • 忍受你更冗长的电话
  • 将静态方法提取到一个类中,使其成为实例方法是有意义的(这也可以提高可测试性等)
  • 静态导入方法
  • 创建一个更大的方法,在MyClass其中依次调用这三个方法。
于 2011-08-01T11:05:07.557 回答
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;
    }

}
于 2011-08-01T11:06:00.580 回答
1

您可以将此类设为单例并执行

return getInstance();

在每一种方法中

于 2011-08-01T11:06:58.247 回答
0

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

于 2011-08-01T11:04:04.637 回答