我正在尝试理解看似类似代码的不同编译结果.似乎有可能将a转换List<Object>为a,List<T>但仅限于T不受具体类限制.所以......
List<Object> bis = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
在下面的编译class Test<T>,以及在class Test<T extends CharSequence>,但不是class Test<T extends BigDecimal>也不class Test<T extends BigDecimal & CharSequence>.
List<T> result = (List<T>) bis;
Run Code Online (Sandbox Code Playgroud)
那么,T与类型和接口类型相关的区别在哪里呢?
编辑:
每个请求一些完整的代码.这将在第9行编译一个编译器警告.对于result像对象中的CharSequence结果实例进行操作一样,确实不安全ClassCastException.
public class Sandbox<T extends CharSequence> {
public static void main(String[] args) {
new Sandbox<CharSequence>().foo();
}
private void foo() {
List<Object> bis = Arrays.asList(Integer.valueOf(1));
List<T> result = (List<T>) bis;
System.out.println(result);
} …Run Code Online (Sandbox Code Playgroud)