假设我有一个包含多个静态void方法的类,例如:
class MyClass {
public static void doJob() {
// ...
}
public static void doSmthElse() {
// ...
}
}
如何修改它以调用我的静态方法:
MyClass.doJob().doSmthElse().doJob();
而不是
MyClass.doJob();
MyClass.doSmthElse();
MyClass.doJob();
我知道如何使用非静态方法(只返回这个),但是如何使用静态字段呢?
答案 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)
这是不可能的,因为没有对象可以返回。