0

true または false の 2 つの値しか持てない String パラメーター (アップロード) を受け取るメソッドがあります。コンパイル時にこのメソッドに正しい値が渡されることを確認する方法はありますか? 私は列挙型で試しましたが、実行時チェックまで取得しました:

public static enum eTrueFalse {TRUE, FALSE};
...

public Result loadSDP(String sdpFile, String name, String upload){
    StringBuilder sbOptionalParameters = new StringBuilder();
    if (upload != null){
        if (isTrueFalse(upload)){
            sbOptionalParameters.append(" --upload ");
            sbOptionalParameters.append(upload);
        } else {
            throw new IllegalArgumentException("The 'upload' parameter takes only 'true' or 'false' value.  Cannot handle: "
                    + upload);
        }
    }
    ...
}

private boolean isTrueFalse(String st) {
    for(eTrueFalse tf : eTrueFalse.values()){
        if(tf.name().equalsIgnoreCase(st)){
            return true;
        }
    }
    return false;
}

もちろん、この質問は、2 つ以上の定義済みの値を持つパラメーターを持つメソッドにも当てはまります。

実行には非常に時間がかかるため、コンパイル時にチェックしたいと考えています。早めにチェックしておいてよかったです。任意のポインタをいただければ幸いです。

編集: より一般的な解決策を探していたときに、ブール値(またはブール値)で簡単に解決できるため、上記の例は良いものではありませんでした。これは(うまくいけば)より良い例です。私は列挙型を持っています:

public enum MEDIA_TYPE {XML, JSON};

そしてそれを取るメソッド:

public ClientResponse get(String address, String user,
        String password, MEDIA_TYPE mediaType) {
...
return webResource.queryParams(new 
        MultivaluedMapImpl()).accept(mediaType).get(ClientResponse.class);

}

上記の問題は、accept メソッドが String を受け取るため、enum を String に変換する必要があることです。最善のアプローチは何ですか?スイッチステートメント?enum クラスにコンストラクターとゲッターを追加しますか? 他の?

4

2 に答える 2

4

コンパイル時にチェックを実行する場合は、型システムを使用する必要がありbooleanます。truefalse

ただし、String フィールドを持つこのメソッドを呼び出すコードがある場合、への変換は実行時にのみ行われるため、コンパイル時に例外がスローされbooleanないことを確認できません。Boolean.valueOf(str)

于 2012-09-28T17:38:46.273 に答える
0

アップロード変数が true または false のみを取る場合、実際にはブール値です。したがって、パラメーター クラスとして Boolean を使用することをお勧めします。これにより、パラメーター クラスのコンパイル時の型チェックが行われます。
パラメータ クラスが文字列のままの場合、文字列パラメータの値は実行時に評価されるため、コンパイル時にそのようなチェックを強制する方法はありません。

于 2012-09-28T18:11:41.253 に答える