我对最近看到的脚本感到困惑。我想要一些解释。我用谷歌搜索,发现,这种机制正在使用,但我无法理解。如果有任何错误,请不要降级我的问题。
我是一名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
。如何调用以及机制是什么?
感谢您宝贵的时间!
答案 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 类型方法。
为什么不将构造函数设为私有? 因为赋予工厂意图控制对象创建机制。