java - 子类的延迟初始化

标签 java lazy-initialization

为了减少类的 NCSS 计数(~850),我将所有方法拆分到它们自己的类中,为了让事情变得更简单,我扩展了一个包含所有辅助函数的抽象类。

AbstractMethod.class

public class AbstractMethod {
    protected String requestWebPage(URL url) {
        // download a webpage as a string
    }
}

示例“帐户”子类

public class AccountData extends AbstractMethod {
    public String getAccount(String sessionId){
        String webPage = requestWebPage("http://google.com/"+sessionId);
        system.out.println(webPage);
        return webPage;
    }
}

我有大约 10 个这样的方法类,并且只想在调用主类/基类中的方法之一时初始化它们:

public class MyBaseClass() {
    private static AccountData ad;

    public MyBaseClass() {
        ad = new AccountData();  // Is there a better way?
    }

    public String getAccount(String sessionId) {
        return ad.getAccount(String sessionId);
    }
}

我试图在 MyBaseClass 类中创建一个初始化函数,该函数接受子类型作为参数并基于它的类创建一个对象:

private void initAccount() {
    if (ad == null) {
        ad = new AccountData();
    }
}

但它很难看,我必须每个子类都有一个。

那么,执行此操作的“正确”方法是什么?有时调用类时,我们只会使用其中的 1 或 2 个方法,所以我不想每次都初始化所有子类。

最佳答案

在我看来,您真正想要的是使用静态方法而不是抽象帮助器类,也许还需要使用 import static

这样,定义这些方法的类将如您所愿,仅在实际调用这些方法时才被初始化。

一般而言,您也不会将继承结构限制在恰好定义方法的位置。

当然,这是假设您不为这些方法使用任何实例数据;但从您的示例代码来看,似乎并非如此。

关于java - 子类的延迟初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19839591/

相关文章:

arrays - 具有惰性元素的数组

java - 惰性 bean 初始化有什么真正的缺点吗?

java - LinkedDataSailGraph - 没有可用于 RDF 格式 JSON-LD 的解析器工厂

java - 验证错误消息中的 Thymeleaf 单引号

java - JNA 加载许多具有相同方法名称的库

Grails 在 SecurityFilters 中使用 Spring Security

java - 分配布局时出错 : BoxLayout can't be shared

java - 我有一个特定时间作为字符串 ("7:00 PM ET")。 Joda-Time 可以将该字符串转换为用户的时区吗?

scala - 为什么我要重新实现懒惰?

android - 在 Android 上使用 Dagger 2 进行延迟注入(inject)