我希望某个超类的子类具有某些构造函数参数,以加载包含我想要传递给超构造函数的信息的XML文件。这是不可能实现的吗?
答案 0 :(得分:14)
如何使用工厂方法代替?也许是这样的:
private MyObject(ComplexData data)
{
super(data);
}
public static MyObject createMyObject(String someParameter)
{
ComplexData data = XMLParser.createData(someParameter);
return new MyObject(data);
}
答案 1 :(得分:8)
您可以在super()调用中调用静态方法,例如
public Subclass(String filename)
{
super(loadFile(filename));
}
private static byte[] loadFile(String filename)
{
// ...
}
答案 2 :(得分:2)
不可能,不。凌乱,可能非常。
我之前需要这样做,并发现最简单最干净的方法是处理它,然后在调用构造函数之前加载数据,然后将其作为参数传递。
答案 3 :(得分:0)
我喜欢工厂的答案,但有时你也可以这样做:
public MyObject(String parm) {
super(parseComplex(parm));
}
private static ComplexData parseComplex(String parm) {
....
return new ComplexData(...);
}
答案 4 :(得分:0)
我喜欢马修的建议。其中一个变体是创建设法预加载数据的对象,并将它们传递给对象的构造函数。
我在一个正在为客户工作的项目中这样做。有一堆需要加载的配置文件。我还需要在构造依赖对象之前建立数据库和Web服务连接。
它工作得很好,很简单,当别人继承这个代码时,他们很容易遵循逻辑。这改善了客户的价值。