【发布时间】:2010-10-01 09:28:09
【问题描述】:
我希望具有某些构造函数参数的某个超类的子类加载一个 XML 文件,该文件包含我想传递给超构造函数的信息。这是不可能的吗?
【问题讨论】:
-
是子类的全部目的只是为了能够用超级构建,还是它确实以更多方式扩展超级?
我希望具有某些构造函数参数的某个超类的子类加载一个 XML 文件,该文件包含我想传递给超构造函数的信息。这是不可能的吗?
【问题讨论】:
改用工厂方法怎么样?可能是这样的:
private MyObject(ComplexData data)
{
super(data);
}
public static MyObject createMyObject(String someParameter)
{
ComplexData data = XMLParser.createData(someParameter);
return new MyObject(data);
}
【讨论】:
你可以在 super() 调用中调用静态方法,例如
public Subclass(String filename)
{
super(loadFile(filename));
}
private static byte[] loadFile(String filename)
{
// ...
}
【讨论】:
不可能,不。凌乱,可能非常。
我以前需要这样做,发现最简单最干净的方法是在调用构造函数之前加载数据,然后将其作为参数传递。
【讨论】:
我喜欢工厂回答,但有时您也可以这样做:
public MyObject(String parm) {
super(parseComplex(parm));
}
private static ComplexData parseComplex(String parm) {
....
return new ComplexData(...);
}
【讨论】:
我喜欢马修斯的建议。一种变体是创建管理预加载数据的对象,并将这些对象传递给对象的构造函数。
我在为客户工作的项目中这样做。有一堆配置文件需要加载。在构建依赖对象之前,我还需要建立数据库和 Web 服务连接。
它工作得很好,很简单,当其他人继承此代码时,他们将很容易遵循逻辑。这提高了客户的价值。
【讨论】: