メソッドへの出動要請
以前はリフレクション使ってこんなことやってたんだが.
Method method = null; ReternObject retval = null; method = targetObject.getClass().getMethod(methodName, null); if (method != null) { retval = (ReternObject) method.invoke(targetObject, null); }
org.apache.commons の beanutils に PropertyUtils という便利なクラスがあるですよ.まぁ, beanutils という名のとおりなんで,非 bean なクラスには使えんのだろうけど,今回の対象は bean なもんで.
Object value = null; Object target = fetch(); if (target != null) { String propertyName = field.getName(); try { Class propClass = PropertyUtils.getPropertyType(target, propertyName); value = PropertyUtils.getProperty(target, propertyName); if (Collection.class.isAssignableFrom(propClass)) { ... } } catch (FooException e) { e.printStackTrace(); ... } ... } return value;
外部コマンド起動
まぁ,こんな感じでエエんでない.出力が欲しければ process から getInputStream() なり getErrorStream() して書き出せばよろしい.
ProcessBuilder processBuilder = new ProcessBuilder(String... command); try { Process process = processBuilder.start(); ret = process.waitFor(); log.info(command + " exited: " + ret); } catch (IOException e) { // start() e.printStackTrace(); } catch (InterruptedException e) { // waitFor() e.printStackTrace(); } return ret;
ちなみに, List<String> command から String... command への変換は.
String[] cmds = (String[])command.toArray(new String[0]);
クチはこんな感じで開いてる.
public static int execute(List<String> command); public static int execute(String... command);
シェル・スクリプトの引数
Red Hat Linux ES3 のシェル・スクリプトまで書かされている.おりゃ,シェル・スクリプトなんて書けねぇっての (笑).
...while truedo case "$1" in --?*) A_OPTIONS="$A_OPTIONS -${1#--}" ;; -?*) B_OPTIONS="$B_OPTIONS $1" ;; *) break ;; esac shiftdone...
この中で動かすコマンドが二種類あって,どれも引数は -[A-z] .* という形で与えなくてはならなくて,しかもコマンド A とコマンド B のオプションには,ほとんど同じような意味であっても表現には全く互換性がない,と.しょんがないから片一方のオプション指定は -- で始めることにして,パターン・マッチで小細工を労する (笑).オプション指定一文字とサブ・オプションの間にはスペースが入る場合があるが,それはこれを起動するクラスの方で,単位ごとにクウォートするようにして起動することで対処.とりあえず,動いてます (笑).
0 件のコメント:
コメントを投稿