从类创建静态对象,其方法类似于方法

时间:2018-06-11 09:24:24

标签: java constructor

我对最近看到的脚本感到困惑。我想要一些解释。我用谷歌搜索,发现,这种机制正在使用,但我无法理解。如果有任何错误,请不要降级我的问题。

我是一名Android开发人员并开始成为传奇人物。 :d

public final class ClassName{

    public static ClassName initSDK(@NonNull @GuiContext Context context) {
        return new ClassName(context);
    }   

    private ClassName(Context guiContext) {
        startSDK(guiContext);
    }

}

什么是 initSDK 。如何调用以及机制是什么?

感谢您宝贵的时间!

4 个答案:

答案 0 :(得分:1)

initSDK这里是static method,您可以通过它的类名来调用它,例如:

ClassName instance1 = ClassName.initSDK(context);

在内部,它会创建object instance ClassName&把它返还。例如,instance1这里是ClassName的实例。

请注意,类构造函数private ClassName(Context guiContext) { .. }声明为private,这意味着您无法通过以下方法实例化此对象:

// Wrong, can't instantiate object this way. Constructor is declared "private"
ClassName instance2 = new ClassName(context);

initSDK类似,有时这个类似的方法名为getInstance(),表示get me an instance of the object,通过包名称进行访问。

答案 1 :(得分:0)

您可以使用其他课程中的ClassName.initSDK()来调用它。它是一种静态方法。请参阅documentation

答案 2 :(得分:0)

这是一种名为Factory Pattern的创建模式,它隐藏了创建逻辑

使用示例:

public interface MyFile {
    public String getContent(String filename);
}

public class MyCSVFile impelments MyFile {
    public String getContent(String filename) {
        // proper implementation on how to open and read CSV file
    }   
}

public class MyPDFFile impelments MyFile {
    public String getContent(String filename) {
        // proper implementation on how to open and read PDF file
    }   
}


public class MyFactory {

    public MyFile factory(String filename) {
        String ext = // utility to get file extension ...
        if (ext.equals("pdf")) {
            return new MyCSVFile(filename);
        }
        if (ext.equals("csv")) {
            return new MyPDFFile(filename);
        }

        // unhandled operation ? setup a default file reader ?
        // ...
    }
}

public class MyBusinessClass {

    public static void main(String[] args) {
        MyFile myFile = new MyFactory().factory(args[1]);
        System.out.println(myFile.getContent(args[1]));
    }
}

答案 3 :(得分:0)

initSDK 是一个工厂方法,用于生成 ClassName 的实例,因为它的构造函数私有,不能是从外面调用。因此,我们需要一些可以在不创建新实例的情况下访问的公共,因此可以使用 public static 类型方法。

  

为什么不将构造函数设为私有?   因为赋予工厂意图控制对象创建机制。