首页 > 解决方案 > 在从子类构造函数调用之前更改超类中定义的静态变量

问题描述

我有classA静态PooledConnectionFactory变量。classB扩展 A。

public class A{
    private static PooledConnectionFactory con;
    public A(){
        this("gets URL from defaults properties file");
    }
    public A(final String url){
       if(con==null){
         //Initialize pooled connection       
       }
//code for connection here
    }
}
public class B extends A {

    private PooledConnectionFactory conn;

    public B(String url){
        super(url);

    }


    public B(){
        super();
    }

}

我想PooledConnectionFactory作为一个非静态变量,以便为每个服务拾取,它被单独初始化。因为它是扩展 A,所以调用转到 A 的构造函数。

为了实现这一目标,我应该在 B 类中做出哪些改变?

标签: javainheritanceconstructor

解决方案


使用单例而不是A构造函数

public class A {

    private static PooledConnectionFactory con;

    public A() {
        this("gets URL from defaults properties file");
    }

    public A(final String url) { }

    public static PooledConnectionFactory getPooledConnectionFactory() {
        if (con == null) {
            //Initialize pooled connection
        }
        return con;
    }
}

推荐阅读