如何避免方法中的许多if / else条件?

时间:2011-01-20 20:23:28

标签: java

对于我的一种方法,我怀疑是正确的。这是URI的合成者,我用于http requests。它只从最后Strings的单独静态类中获取数据,将它们合并在一起,并在必要时包含从服务器令牌接收的数据。它发生了所有URIs都有令牌和唯一的身份验证,没有它。我做了什么:

private URI urlComposer(String apiUri, String token) { 
        URI uri = null;
        try {

            if(apiUri.equals("POST_AUTH_URL")) {
                uri = URIUtils.createURI(null, MyConfig.WEB_SERVER, -1, apiUri, null, null);
                return uri; 
            }

            String tmp = apiUri.toString();
            String[] array = tmp.split("<token>");
            tmp = array[0] + auth.getToken() + array[1];

            uri = URIUtils.createURI(null, MyConfig.WEB_SERVER, -1, tmp, null, null);

            if (MyConfig.DEBUG) Log.d("Dev", "Constructed url " + uri);
            return uri; 
        } catch (URISyntaxException e) {
            if (MyConfig.DEBUG) Log.d("Dev", "urlComposer was unable to construct a URL"); 
            e.printStackTrace();
        }
        return null;
    }

尝试展望未来我不喜欢生成更多if / else语句的想法,如果我有更多特殊情况,例如POST_AUTH_URL。一方面我想要调用唯一一个方法来构造URI,另一方面我不想要这些ifs。我该怎么办?

2 个答案:

答案 0 :(得分:2)

如果您始终只设置不同的URI,则可以使用地图:

uriMap.put("POST_AUTH_URL", URIUtils.createURI(null, MyConfig.WEB_SERVER, -1, apiUri, null, null));

您可以稍后访问此地图:

uri = uriMap.get(apiUri);

答案 1 :(得分:0)

理论上,您可以使用方法createURI创建枚举URI_TYPE(很难从提供的代码片段中获取实际参数)。这样,您只需在特定的枚举值上调用此方法,该值具有自己的特定实现。

请参阅thisthis以获取更多信息。希望它有所帮助。