日期:2014-05-20 浏览次数:20855 次
public static <T> T[] getDiff(T[] args){
Set<T> set = new HashSet<T>();
for(T arg : args){
set.add(arg);
}
return (T[]) set.toArray();
}
public static void main(String[] args){
String[] a = {"1", "2", "1","3","1", "2"};
String[] c = getDiff(a);
}
public static <Object> T[] getDiff(T[] args){
Set<Object> set = new HashSet<T>();
for(Object arg : args){
set.add(arg);
}
return (T[]) set.toArray();
}
------解决方案--------------------
java 不支持泛型数组
------解决方案--------------------
3楼说的对,下面是两种折中的办法:
public static <T> T[] getDiff(Class<T> type, T... args) {
Set<T> set = new HashSet<T>(Arrays.asList(args));
@SuppressWarnings("unchecked")
T[] result = (T[])Array.newInstance(type, set.size());
return (T[])set.toArray(result);
}
public static <T> Set<T> getDiff(T... args) {
return new HashSet<T>(Arrays.asList(args));
}
------解决方案--------------------
为什么你的 (T[])set.toArray(); 不行:
因为Java的泛型信息在编译的时候被抹掉了,set.toArray()被运行的时候,其内部实际建立的是new Object[set.size()],然后强制转换 Object[] 为 String[] 的时候出错。