Alb*_*ert 7 java casting variadic-functions
考虑到这一点:
interface A<T> { /*...*/ }
interface B<T> extends A<T> { /*...*/ }
class C { /*...*/ }
void foo(A<T>... a) { /*...*/ }
Run Code Online (Sandbox Code Playgroud)
现在,其他一些代码想要使用foo:
B<C> b1 /* = ... */;
B<C> b2 /* = ... */;
foo(b1, b2);
Run Code Online (Sandbox Code Playgroud)
这给了我警告
Type safety : A generic array of A is created for a varargs parameter
Run Code Online (Sandbox Code Playgroud)
所以我改变了对此的调用:
foo((A<C>) b1, (A<C>) b2);
Run Code Online (Sandbox Code Playgroud)
这仍然给了我同样的警告.
为什么?我该如何解决这个问题?
编辑:答案更新,以反映该问题已更新,以显示A确实是通用的.
我认为A必须是通用的才能获得该错误.在您的项目中是一个通用的,但上面的代码示例将通用的decl退出?
如果是这样,因为A是通用的, 你不能干净地处理警告.Varargs使用数组实现,数组不支持通用数组,如下所述:
| 归档时间: |
|
| 查看次数: |
14183 次 |
| 最近记录: |