Javaにおけるnew T()相当
Javaのコマンドラインアプリケーションを作っているのですが、どうしてもnew T()相当を実装したいのですが、回避策はないでしょうか。
親クラス
public abstract class AbstractCommandLineRunner<T extends AbstractCommandLineOption> implements CommandLineRunner {
protected abstract int execute(T option);
protected abstract T newOptionInstance();
public void run(String... args) {
// ここで本当はT option = new T()として、newOptionInstance()を排除したい
T option = newOptionInstance();
new CmdLineParser(option).parseArgument(args);
}
}
サブクラス
public class HogeRunner extends AbstractCommandLine<HogeOption> {
// このメソッドの実装を省略したい...
@Override
protected HogeOption newOptionInstance() {
return new HogeOption();
}
@Override
protected int execute(HogeOption option) {
// blah blah
}
}
コマンドが増えるたびに下記の手順で、実装するというアーキテクチャにしたいのですが、
- AbstractCommandLineOptionを継承してコマンド引数を格納するオブジェクトを用意
- AbstractCommandLineRunnerを継承してexecuteメソッドに処理を実装
CmdLineParserライブラリの都合上、オプションのインスタンスが必要なため、newOptionInstance()というabstractメソッドを定義しています。できればこれを排除して親クラスでインスタンスを作りたいのですが、Javaにおいては困難でしょうか。
開発言語:Java
開発環境:Eclipse
フレームワーク:Spring Boot