有没有办法让这项工作用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;
}
但我不想被迫返回一个值。
答案 0 :(得分:8)
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);
}
答案 1 :(得分:7)
在java.util.Collections
中,已经有swap(List<?> list, int i, int j)
。
这是OpenJDK source code中实现的方式:
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认为这是可以容忍的。
答案 2 :(得分:0)
使用捕获助手:
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);
}