未经检查的强制转换泛型

发布于 2024-11-04 16:56:23 字数 611 浏览 3 评论 0原文

在我的代码中我有 <代码> 私有 E[] arrCirc; 在我的构造函数中,我有 arrCirc = (E[]) new Object[capacity]; 但是当我尝试编译它时,我收到警告:

[unchecked] unchecked cast
发现:java.lang.Object
必需:E[]

错误,我不知道为什么。

public class Array12<E> implements LimCapList<E>{

  private int size = 0;
  private int capacity = 0;
  private int front;
  private int back;
  private E[] arrCirc;

  public Array12(int capacity){
     if( capacity <= 0)
       throw new IllegalArgumentException();
     arrCirc = (E[]) new Object[capacity];
     front = 0;
     back = 1;
  }

In my code I have

private E[] arrCirc;

and in my constructor I have arrCirc = (E[]) new Object[capacity];
but when I try to compile it I get an warning:

[unchecked] unchecked cast
found : java.lang.Object
required: E[]

Error and I'm not sure why.

public class Array12<E> implements LimCapList<E>{

  private int size = 0;
  private int capacity = 0;
  private int front;
  private int back;
  private E[] arrCirc;

  public Array12(int capacity){
     if( capacity <= 0)
       throw new IllegalArgumentException();
     arrCirc = (E[]) new Object[capacity];
     front = 0;
     back = 1;
  }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

黑白记忆 2024-11-11 16:56:23

你能让你的 arrCirc 类型为 Object[] (像大多数openJDK 中的通用集合 吗)?

(并执行 arrCirc = new Object[capacity];

否则对于警告,您可以使用 SupressWarning。

        @SuppressWarnings("unchecked")
        public Array12(int capacity){
             if( capacity <= 0)
               throw new IllegalArgumentException();
             arrCirc = (E[]) new Object[capacity];
             front = 0;
             back = 1;
          } 

Can you make your arrCirc of type Object[] (like most generic collections in openJDK do) ?

( and do arrCirc = new Object[capacity]; )

Otherwise for the warning, you can just use SupressWarning.

        @SuppressWarnings("unchecked")
        public Array12(int capacity){
             if( capacity <= 0)
               throw new IllegalArgumentException();
             arrCirc = (E[]) new Object[capacity];
             front = 0;
             back = 1;
          } 
我ぃ本無心為│何有愛 2024-11-11 16:56:23

Java 使用类型擦除来实现泛型,因此它无法在运行时知道您对 (E[]) 的含义,这就是为什么您会收到潜在不安全强制转换的警告。

看一下 Sun(呃……Oracle)文档: http:// /download.oracle.com/javase/tutorial/java/generics/erasure.html

您始终可以使用 @SuppressWarnings(value = "unchecked") 使警告消失。

Java uses Type Erasure to implement generics, so it can't know at Runtime what you mean with (E[]), that's why you get the warning of a potentially unsafe cast.

Take a look at Sun (erm... Oracle) documentation: http://download.oracle.com/javase/tutorial/java/generics/erasure.html

You can always use @SuppressWarnings(value = "unchecked") to make the warning go away.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文