改造2次呼叫覆盖

时间:2017-02-26 12:09:56

标签: java design-patterns overloading retrofit2

我在网上看到的有关改装2的所有示例都包含一个界面,其中有不同的网址可以进行调用。

我以。的形式做了同样的事。

@GET("NewsFeed/latest")
Observable<ArrayList<News>> getNews(@Query("category") int category,
                                    @Query("language") int language,
                                    @Query("location") int location,
                                    @Query("poster") int poster,
                                    @Query("limit") int limit,
                                    @Query("offset") long offset);

该调用中的所有参数都是可选的,因此即使没有指定任何参数也可以进行调用。除了重载方法之外,还有什么方法可以做到这一点? 我应该使用@nullable注释吗?

2 个答案:

答案 0 :(得分:1)

您可以使用@QueryMap。这允许我们在Map中指定查询,并且可以在不修改现有代码的情况下轻松添加新查询参数。

@GET("NewsFeed/latest")
Observable<ArrayList<News>>getNews(
            @QueryMap Map<String, String> options);

用途:

private void fetchNews() {  
    Map<String, String> data = new HashMap<>();
    data.put("category", "Sports");
    data.put("language", String.valueOf(2));

    // simplified call
    newsService.getNews(data);
}

参考this for more details

答案 1 :(得分:0)

如您所见here,查询参数是可选的。通过将null传递给方法,retrofit将忽略查询参数。

(也许你不应该使用原始类)