当前位置: 首页 > 面试题库 >

在某些Java泛型转换中,类型安全警告的含义是什么?

赵辉
2023-03-14
问题内容

Java警告 是什么意思?

类型安全性:从Object到List 的强制转换实际上是针对擦除的List类型进行检查

当我尝试将Object强制转换为具有通用信息的类型时,会收到此警告,例如以下代码:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;

问题答案:

出现此警告是因为Java在运行时实际上并未在使用泛型的对象中存储类型信息。因此,如果object实际上是a
List<String>,则ClassCastException在运行时将没有任何内容,除非直到从列表中访问的项目与变量中定义的通用类型不匹配为止。

如果使用不正确的通用类型信息将项目添加到列表,则可能导致进一步的复杂性。现在,任何仍保留对列表的引用但具有正确的泛型类型信息的代码将具有不一致的列表。

要删除警告,请尝试:

List<?> list = (List<?>) object;

但是,请注意,由于编译器不知道您是否尝试添加错误类型的对象,因此您将无法使用诸如add之类的某些方法。上面的方法在很多情况下都可以使用,但是如果您必须使用add或类似的受限方法,则只需在Eclipse(或SuppressWarning批注)中使用黄色下划线即可。



 类似资料:
  • 问题内容: 我有一些数据存储在Java元素中,我需要以给定的格式JSONObject返回它。虽然我的实现工作正常,但是我仍然从eclipse收到警告消息(版本:Juno Service Release 2): “ 类型安全性:put(Object,Object)方法属于原始类型HashMap。对通用类型HashMap的引用应参数化 ” 这是我的代码: 有问题的行是: 除了添加之外,还有其他方法可以

  • 我有一个父类来处理我所有的自定义异常,父母异常。我希望所有的子异常都有一个方法来向异常添加消息。为了做到这一点,我创建了一个泛型方法,在向其添加消息后返回泛型类型的对象。我在父类方法中使用来添加消息,然后返回,但是由于该方法返回泛型类型,所以我将其转换为泛型类型T。这似乎是可行的,但是给出了警告。我的代码如下: 该行给出的警告是。这种方法似乎确实如预期的那样有效,所以我并不担心,但我想更好地理解为

  • 我正在堆栈中实现一个列表链接。该程序成功通过了所有必需的测试,但我遇到了此警告。程序的实现没有中断,但我正在寻求消除此问题。你能告诉我如何通过编辑Equals方法中的代码来修复它吗?未选中的强制转换:“java.lang.对象”到“LinkedStack”

  • 我有一个通用类。它看起来像这样: 显然,conevertdatajsonstring方法仅在字符串类型为T时调用。但有一个警告: 类型安全:未选中从字符串转换为T 有没有一种方法可以在不使用SuppressWarnings的情况下解决此问题: @抑制警告(“未选中”) 方法之前?

  • JLS 5.1.9将未检查的转换定义如下: 让G用n个类型参数命名一个泛型类型声明。 从原始类或接口类型G到形式

  • 问题内容: 我不明白为什么在尝试执行以下操作时会收到警告(未经检查的演员表): 我的意思是将castedMap发布到外部代码的危险是什么?两种操作均可在运行时完美运行: 使用SomeType类型的键从castedMap获取元素 使用SomeType类型的键将元素放入castedMap中。 我只是使用@SuppressWarnings(“ unchecked”)取消警告。 问题答案: 答案可能很无聊