我编写了一个小的 Web API,它应该可以轻松创建 URI。每个资源类都应包含一个createURI
采用所需参数的方法。此方法应在后台使用辅助方法 ,populateUriTemplate
来创建 URI 字符串。populateUriTemplate
需要键值对来填充 URI 模板。在另一种语言(如 Scala 或 Python)中,我会使用命名参数,但 Java 不支持它们。那么问题来了:如何在Java中模拟命名参数?
直接的解决方案是创建一个地图:
public String createUri(int id, String name){
Map<String, Object> params = new HashMap<String, Object>();
params.put("id", id);
params.put("name", name);
return populateUriTemplate(params);
}
但我不喜欢先创建地图,然后将每个参数都放入其中。
另一个想法是使用静态方法 ,param
来创建键值对:
public String createUri(int id, String name){
return populateUriTemplate(param("id", id), param("name", name));
}
在我看来好多了!
即使需要更多字符,也可以对其进行一些改进以使其更加不言自明:
public String createUri(int id, String name){
return populateUriTemplate(key("id").value(id), key("name").value(name));
}
我也想到了构建器模式,但这会迫使我的 API 的用户为每个资源类创建一个显式的构建器,这会很乏味而没有好处。只要toString
存在适当的实现方法,参数的类型并不重要。
我最喜欢的是上面的静态方法(param(key, value)
或key(k).value(v)
)的两种方法之一。您知道在这种情况下模拟命名参数的更好方法吗?