gpt4 book ai didi

java - 我应该使用问号类型参数还是抑制原始类型警告?

转载 作者:行者123 更新时间:2023-11-30 03:20:53 27 4
gpt4 key购买 nike

自从 Java 中引入泛型类型参数(或类型参数)后,在 Eclipse IDE 中编写以下行将在类型 Class 上显示一条黄色波浪线。 :

Class myClass;

鼠标悬停时显示的警告如下,有两个选项(除其他外):

Class is a raw type. References to the generic type Class<T> should be parameterized.

  • Add type arguments to 'Class'
  • Add @SuppressWarnings 'rawtypes' to 'myClass'

第一个选项生成以下代码:

Class<?> myClass;

第二个产生这个:

@SuppressWarnings("rawtypes")
Class myClass;

上述两个选项对于处理警告同样足够。

假设我们和 Eclipse 都无法推断泛型类型参数*;在什么情况下应该采取什么更好的方法以及为什么?

*(尽管可以选择尝试这样做)

最佳答案

每个程序员都应该遵守的一般规则:永远不要无缘无故地抑制警告。如果您抑制警告,您应该知道为什么会出现警告以及为什么它在您的情况下不会出现问题。

在这种情况下,抑制 rawtype 警告的原因是为了支持在 Java 中不存在通用性的时代编写的遗留代码(请参阅 Java 语言规范 4.8):

The use of raw types is allowed only as a concession to compatibility of legacy code. The use of raw types in code written after the introduction of genericity into the Java programming language is strongly discouraged. It is possible that future versions of the Java programming language will disallow the use of raw types.

所以它不适用于您的情况,您不应该抑制此警告。

关于通配符? ,仅当您想为该变量分配各种类型时才应使用此方法。

例如 List<?> mylist允许您存储列表中的任何类型,而 List<? extends Collection>允许您存储继承自 Collection 的任何类型存储在列表中。一般规则是尽可能具体地说明允许的类型。这样,如果您不小心将不适合该对象的对象添加到列表中,编译器可以通知您。

因此,最好的方法是考虑如何使用 myClass 变量,如果您可以声明它将保存哪种类型的对象,请将通配符替换为该类型。

关于java - 我应该使用问号类型参数还是抑制原始类型警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31365368/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com