繁体   English   中英

在调用超类的构造函数之前,是否无法执行初始化?

[英]Is it impossible to perform initialization before calling a superclass's constructor?

我想要一个具有某些构造函数参数的某个超类的子类来加载包含我想要传递给超构造函数的信息的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服务连接。

它工作得很好,很简单,当其他人继承这个代码时,他们很容易遵循逻辑。 这提高了客户端的价值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM