一般的に使用されるメソッドを実装する抽象クラス A を作成しました。ここで、新しいクラスは同じメソッドを使用する必要があることに気付きましたが、属性値は異なります。以下に簡単な要約を示します。
public abstract class A implement IUtils {
protected final String LOGIN_XPATH = "xpathA";
public String getLoginName() {
return getXpath(LOGIN_XPATH);
}
}
public class B extends A {
private final String LOGIN_XPATH = "xpathB";
}
B.getXpath() を呼び出すと、スーパー メソッドが呼び出され、"xpathA" が使用されます。「xpathB」を使用したいと思います。クラスAで次の構成を使用することを考えました。
public abstract class A implement IUtils {
protected IXpaths xpaths = null;
public A() {
xpaths = new XPathsClass();
}
public String getLoginName() {
return getXpath(xpaths.getXpath(StaticString.LOGIN_XPATH));
}
}
public class StaticString {
public final String LOGIN_XPATH = "LOGIN_XPATH";
}
public class XPathsClass implements IXpaths {
private static final Map<String, String> conversionMap = new HashMap<String, String>();
static {
conversionMap.put(StaticString.LOGIN_XPATH, "xpathA");
}
public String getValue(String query) {
return conversionMap.get(query);
}
}
public class XPathsClassB implements IXpaths {
private static final Map<String, String> conversionMap = new HashMap<String, String>();
static {
conversionMap.put(StaticString.LOGIN_XPATH, "xpathB");
}
public String getValue(String query) {
return conversionMap.get(query);
}
}
public class B extends A {
public B() {
super();
xpaths = new XPathsClassB();
}
}
これは機能しているように見えますが、非常に長くなり、読みにくくなります。より良い方法は何でしょうか?