簡體   English   中英

使用Dagger注入通配符類型

[英]Injecting wildcard types with Dagger

我不知不覺地走進了一個泛型漏洞並且遇到了Dagger對象圖驗證錯誤(我假設它是dagger-compile驗證但沒有生成特定的錯誤消息 - 只是maven的漂亮的BUILD FAILURE消息)。 我試圖注入一個通配符類型的實現。 我有點不知所措,以便更好地理解我創建的問題,所以這里是代碼;

@Inject Provider<MarkerOption<?>> markerOptionProvider;

模塊定義;

  @Provides MarkerOptions<?> provideMarkerOptions() {
    MarkerOptions<?> options;
    if (ConnectionResult.SUCCESS == GooglePlayServicesUtil.isGooglePlayServicesAvailable(context)) {
      // This is the Google maps MarkerOption impl
      options = new GoogleMapMarkerOptions(new com.google.android.gms.maps.model.MarkerOptions());
    } else {
      // This is the osmdroid impl of MarkerOptions
      options = new OsmDroidMarkerOptions();
    }

    return options;
  }

我猜這里的代碼氣味是提供者注入,但我有興趣更好地理解dagger-compiler在嘗試解決實現時遇到的問題。 值得注意的是,刪除通配符泛型<?>允許Dagger計算應用程序運行所需的對象圖。 我原以為注入MarkerOptions提供程序會利用模塊MarkerOptions綁定,而不管接口類型如何。

如果有人能夠向我解釋出了什么問題/為什么我不應該這么做,那么這將是非常值得贊賞的。

Dagger目前不支持注入中的通配符類型。 您需要注入具體類型或原始類型(如您所見)。

理論上可以支持簡單的通配符,只要提供的是Foo<?> ,注入的是Foo<?> - 部分匹配將是令人望而卻步的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM