调用静态方法后重用类

tsd*_*sds 0 java static static-methods method-chaining

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

class MyClass {
    public static void doJob() {
        // ...
    }
    public static void doSmthElse() {
         // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

MyClass.doJob().doSmthElse().doJob();
Run Code Online (Sandbox Code Playgroud)

代替

MyClass.doJob();
MyClass.doSmthElse();
MyClass.doJob();
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 8

好吧,你可以这样做:

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

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

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

选项:

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

  • +1 - 特别是"不要做".但是你忘了改变doSmthElse上的签名. (2认同)