我一直在使用几种调用方法的方法。最近,我一直在使用一个类的静态实例,我相信它是适当的术语(如果我错了,请纠正我)。哪个更好(甚至建议想法),为什么?
第一种方式我是简单的旧静态方法。
static void exampleMethod1(){}
static void exampleMethod2(){}
第二种方式(有人说这是一种改进)。
public class ExampleClass{
public static ExampleClass instance;
public ExampleClass(){
instance = this;
}
public static ExampleClass getInstance(){
return instance;
}
void exampleMethod1(){
//code
}
void exampleMethod2(){
//code
}
// To call the method I simply getInstance().exampleMethod1
}
答案 0 :(得分:6)
您正在寻找的术语是 singleton 。
单例上的静态方法和实例方法都是可行的方法,但请注意静态方法方法无法实现接口,因此如果需要实现接口,请使用单例。
例如:
public enum HelloWorld implements Runnable {
INSTANCE;
@Override
public void run() {
System.out.println("Hello, world!");
}
}
// ...
new Thread(HelloWorld.INSTANCE).start();
如果您的hello-world代码采用静态方法,则无法直接实现Runnable
接口。
答案 1 :(得分:4)
如果所有方法都是静态的,并且您不需要初始化类或具有类成员,那么只需创建一个静态实用程序类。
只有静态函数的静态类就可以了。
当克里斯在我上面回答时,听起来你正在寻找一个单身人士,你应该只在你的班级有非静态方面时才使用,但你想限制它的实例数量。
public static class GeneralFunctions
{
public static class ArrayFunctions
{
public static void OnArray{};
}
public static class PrintingFunctions
{
public static void PrintBuffer(byte[] buffer){};
public static void PrintQword(ulong qword){};
}
}
答案 2 :(得分:1)
您可以拥有一个只有静态方法的类,并且这些方法可以(如果需要)在类中使用静态字段作为持久数据。或者您可以使用“单例”类实例与实例方法和实例字段大致相同。
通常,如果您的类只包含没有状态的方法(例如,Math类),则应该使方法为静态而不允许/允许实例。但是,如果方法必须具有某种共享状态,那么实现某种“单例”实现可能更明智。
答案 3 :(得分:1)
要制作一个合适的单例,你必须将构造函数设为私有。静态最终声明确保在首次加载类时初始化实例。这是在Java中创建单例的最简单方法,但请注意还有其他方法。
public class ExampleClass
{
private final static ExampleClass instance = new ExampleClass();
private ExampleClass()
{
// prevents instantiation
}
public static ExampleClass getInstance()
{
return instance;
}
void exampleMethod1()
{
//code
}
void exampleMethod2()
{
//code
}
}
获取该类的实例:
ExampleClass exampleClass = ExampleClass.getInstance();
exampleClass.exampleMethod1();