public class A extends B {
private A(B b) {
super(b);
}
public static A parse(string s) // question 1
{
B result = D.parse(s);
return new A(result); // question 2
}
}
问题1:我不明白这是什么类型的构造函数(?)。
我对常规构造函数的看法类似于public A().
但是这个:
public static A parse(string s)
我该如何解读?
问题2: new A(result);
返回时,这个“新”做了什么?
这个方法是返回并调用私有构造函数吗?
答案 0 :(得分:5)
问题1:它根本不是构造函数,它只是一个创建对象的静态方法。
问题2:new
用于调用类的构造函数。 new A(...)
调用传递参数的A
构造函数。
所以你在A
中所拥有的是一个无法以正常方式实例化的类(因为构造函数是私有的),但是可以通过调用{ 来获取实例{1}}。在这种情况下,A.parse
通常称为“工厂”方法。
答案 1 :(得分:2)
它不是构造函数。这是一种静态方法。它的返回类型是A,所以返回A。
return new A(result);
相当于
A temp = new A(result);
return temp;
它调用私有构造函数,它允许创建A的新实例,然后返回这个新实例。
您所拥有的是一种典型的工厂方法。就像Integer.valueOf(String)
一样。