2014-06-26 40 views

回答

1

我的解決辦法:

public static <T> List<T> 
cast(List<? super T> list, Class<T> clazz) { 

     if(list.stream().allMatch(clazz::isInstance)) 
      return (List<T>) list; 
     else 
      throw new IllegalArgumentException ("Not all inputs are of class " + clazz.getName()); 
    } 
+1

你可以使用'List '來防止有人試圖調用'List s = cast(myNumbers,String.class)'。 –

+0

@BoristheSpider好點! –

0
public static void main(String[] args) { 
    List<Number> foo = new ArrayList<>(); 

    List<Integer> a = cast(foo); 

    System.out.println("a = " + a); 
} 

public static <T, C extends T> List<C> cast(List<T> l) { 
    return (List<C>) l; 
}