cod*_*ewb 5 java weak-references
我知道如何声明一个 individual WeakReference
,但是一个数组呢?
WeakReference<String> testWR;
testWR = new WeakReference<String>("Hello");
String[] exStrArr;
exStrArr = new String[5];
WeakReference<String>[] testWR2;
//not working
testWR2 = new WeakReference<String>[5];
testWR2 = new WeakReference<String>(new String())[5];
testWR2 = new WeakReference<String>()[5];
Run Code Online (Sandbox Code Playgroud)
有人可以在这里告诉我正确的语法吗?我一定会很感激的 =)
您无法创建参数化类型的数组(无界通配符类型除外)。考虑使用 aList
代替:
List<WeakReference<String>> testWR2 = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
出于类型安全原因,对数组的这种限制是必要的。例如,考虑这里给出的示例,它显示了如果允许参数化类型的数组会发生什么:
// Not really allowed.
List<String>[] lsa = new List<String>[10];
Object o = lsa;
Object[] oa = (Object[]) o;
List<Integer> li = new ArrayList<Integer>();
li.add(new Integer(3));
// Unsound, but passes run time store check
oa[1] = li;
// Run-time error: ClassCastException.
String s = lsa[1].get(0);
Run Code Online (Sandbox Code Playgroud)
如果允许参数化类型的数组,则前面的示例将在没有任何未经检查的警告的情况下进行编译,但在运行时会失败。我们将类型安全作为泛型的主要设计目标。特别是,该语言旨在保证如果您的整个应用程序已使用 编译而没有未经检查的警告
javac -source 1.5
,则它是类型安全的。
归档时间: |
|
查看次数: |
1450 次 |
最近记录: |