簡體   English   中英

通用集合作為Java方法參數

[英]Generic collection as a Java method argument

有沒有辦法讓這個工作在Java?

 public static void change(List<? extends Object> list, int pos1, int pos2) {
  Object obj = list.get(pos1);
  list.set(pos1, list.get(pos2));
  list.set(pos2, obj);
 }

我成功避免警告和錯誤的唯一方法是:

 public static <T> T change(List<T> list, int pos1, int pos2) {
  T obj = list.get(pos1);
  list.set(pos1, list.get(pos2));
  list.set(pos2, obj);
  return obj;
 }

但我不喜歡被迫返回一個值。

制作通用方法

public static <T> void change( List<T> list, int position1, int position2) {
    T obj = list.get(position1);
    list.set(position1, list.get(position2));
    list.set(position2, obj);
}

java.util.Collections ,已經有一個swap(List<?> list, int i, int j)

這是它在OpenJDK源代碼中的實現方式:

public static void swap(List<?> list, int i, int j) {
   final List l = list;
   l.set(i, l.set(j, l.get(i)));
}

有趣的是,它使用原始的List類型來完成這項工作。 代碼在編譯時生成警告,但可能是@author Josh Bloch和Neal Gafter認為這是可以容忍的。

使用捕獲助手:

public static void change(List<?> list, int pos1, int pos2) {
    changePrivate(list, pos1, pos2);
}

public static <T> void change(List<T> list, int pos1, int pos2) {
    T obj = list.get(pos1);
    list.set(pos1, list.get(pos2));
    list.set(pos2, obj);
}

暫無
暫無

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

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