utility method をalias のように名前を付けて区別するちょっとした技(といえるのだろうか・・・
以下 java source
pacakge hoge; import javax.swing.JEditorPane; import framework.*; interface YourInterface { static abstract class Helper { public static final String PLUGIN_KEY_PREFIX = "plugin.default."; public static final String PLUGIN_DEFAULT_FORMAT_KEY = PLUGIN_KEY_PREFIX + "about-format"; /** * @param key * @param rp * @return */ public static String BuildMessageString(String key, IResourceProvider rp) { String content = rp.getString(PLUGIN_KEY_PREFIX.concat(key)); return rp.getString(PLUGIN_DEFAULT_FORMAT_KEY, new String[]{content}); } /** * @param key * @param rp * @return */ public static Object BuildMessageHTML(String content) { return new JEditorPane("text/html", content); } /** * cannot instantiate. */ private Helper() {}
} static abstract class StringModule { public static final String HOGE_GEHO = "HOGE_GEHO"; public static final int INT_HOGE_GEHO = 1; /** * @param key * @param rp * @return */ public static String genString(String key, IResourceProvider rp) { return null; } /** * @param key * @param rp * @return */ public static Object getHTML(String key, IResourceProvider rp) { return null; } /** * cannot instantiate. */ private StringModule() {} } }
これを抽象クラスなどが implement し、サブクラスが利用する。
YourInterface は ただのダミー。
package hoge; import framework.*; public abstract class TheObject implements YourInterface { public TheObject() {} public Object createMessage() { String key ="any.key"; IResourceProvider rp = Domain.getProvider(AppProviders.STRING); return StringModule.getString(key, rp); } public abstract Object createMessage2();
}
package implementation; import hoge; public class TheObjectExtends extends TheObject { public TheObjectExtends() {} public Object createMessage2() {
String content = super.createMessage(); return Helper.BuildMessageHTML(content); } }
あとがき
source の可読性が良くなると思っての提案ですが、
まあ、何と言いますか "TheObject に inner class でいいんじゃね?" とか言われそうですね(^^;