为了减少我的NCSS类的数量(~850),我将所有方法分成了自己的类并且为了简化,我扩展了一个包含所有辅助函数的抽象类。
AbstractMethod.class
public class AbstractMethod {
protected String requestWebPage(URL url) {
// download a webpage as a string
}
}
Example "account" subclass
public class AccountData extends AbstractMethod {
public String getAccount(String sessionId){
String webPage = requestWebPage("http://google.com/"+sessionId);
system.out.println(webPage);
return webPage;
}
}
我有大约10个这样的方法类,并且只想在调用main / base类中的一个方法时初始化它们:
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个方法,所以我不想每次都要初始化所有子类。
答案 0 :(得分:4)
在我看来,你真正想要的是使用静态方法而不是抽象助手类,可能还有import static
。
这样,定义这些方法的类只会在实际调用方法后初始化。
您也不会将您的继承结构限制为恰好定义方法的位置。
当然,假设您没有为这些方法使用任何实例数据;但是从示例代码的外观来看,它似乎并非如此。
答案 1 :(得分:1)
用Java实例化类很便宜。如果课程没有在他们的结构中做任何实质性的事情,那么就这样做
public String getAccount(String sessionId) {
AccountData ad = new AccountData();
return ad.getAccount(String sessionId);
}
不要优化它不必要的地方。之前描述您的代码。你可能会对你的假设有多么不满(我知道我多次)。