簡體   English   中英

Java泛型,嵌套類型參數

[英]Java generics, nesting Type parameters

我想創建一個泛型方法,將Collection<T>作為參數,對元素(映射)執行某些操作並返回Collection<R> 這不是問題,具有以下聲明:

public <R,T> Collection<R> foo(Collection<T> c);

現在,我想強制我的方法返回相同類型參數的Collection,因此不需要將返回值強制轉換為特定的集合。 像這樣的東西:

public <R, T, S extends Collection> S<R> foo(S<T> c);

可悲的是,這不會編譯。

這可以以某種方式完成嗎? 這樣做的正確方法是什么?

如果要使用泛型,執行此操作的一種方法是執行以下操作:

public <R, S, CR extends Collection<R>, CS extends Collection<S>> CR foo(CS c);

問題是綁定您的參數和返回類型。

你不能用這種方式將兩個泛型綁在一起。 無論如何,即使你仍然需要在foo中創建一個新的集合。 (你不能重用c,這將創建一個堆積的堆)

一種方法是為集合提供強制執行類型的供應商:

  public static void callFoo(){
     List<String> strings = new ArrayList<>();
     ArrayList<Integer> foo = foo(strings, ArrayList::new);
  }

  public static <R,T, S extends Collection<R>> S foo(Collection<T> ts, Supplier<S> supplier){
    S s = supplier.get();
    for(T t:ts){
        s.add(null);
    }
    return s;
  }

您可以在Java中使用方法重載,嘗試在映射方法中重載數據操作。

暫無
暫無

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

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