@suppressWarnings("unchecked") java 中是什么意思

如题所述

J2SE 提供的最后一个批注是 @SuppressWarnings。该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默。

一点背景:J2SE 5.0 为 Java 语言增加了几个新的特性,并且和它们一起增加了许多新的警告并承诺在将来增加更多的警告。您可以为 "javac" 增加 -Xlint 参数来控制是否报告这些警告(如上面的 @Deprecated 部分所示)。

默认情况下,Sun 编译器以简单的两行的形式输出警告。通过添加 -Xlint:keyword 标记(例如 -Xlint:finally),您可以获得关键字类型错误的完整说明。通过在关键字前面添加一个破折号,写为 -Xlint:-keyword,您可以取消警告。(-Xlint 支持的关键字的完整列表可以在 javac 文档页面上找到。)下面是一个清单:

关键字 用途
deprecation 使用了不赞成使用的类或方法时的警告
unchecked 执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。
fallthrough 当 Switch 程序块直接通往下一种情况而没有 Break 时的警告。
path 在类路径、源文件路径等中有不存在的路径时的警告。
serial 当在可序列化的类上缺少 serialVersionUID 定义时的警告。
finally 任何 finally 子句不能正常完成时的警告。
all 关于以上所有情况的警告。

@SuppressWarnings 批注允许您选择性地取消特定代码段(即,类或方法)中的警告。其中的想法是当您看到警告时,您将调查它,如果您确定它不是问题,您就可以添加一个 @SuppressWarnings 批注,以使您不会再看到警告。虽然它听起来似乎会屏蔽潜在的错误,但实际上它将提高代码安全性,因为它将防止您对警告无动于衷 — 您看到的每一个警告都将值得注意。

下面是使用 @SuppressWarnings 来取消 deprecation 警告的一个例子:

public class DeprecatedExample2 {
@Deprecated
public static void foo() {
}
}

public class DeprecatedUser2 {
@SuppressWarnings(value={"deprecation"})
public static void main(String[] args) {
DeprecatedExample2.foo();
}
}

@SuppressWarnings 批注接收一个 "value" 变量,该变量是一个字符串数组,它指示将取消的警告。合法字符串的集合随编译器而变化,但在 JDK 上,可以传递给 -Xlint 的是相同的关键字集合(非常方便)。并且要求编译器忽略任何它们不能识别的关键字,这在您使用一些不同的编译器时非常方便。

因为 @SuppressWarnings 批注仅接收一个参数,并为该参数使用了特殊的名称 "value",所以您可以选择省略 value=,作为一种方便的缩写:

public class DeprecatedUser2 {
@SuppressWarnings({"deprecation"})
public static void main(String[] args) {
DeprecatedExample2.foo();
}
}

您可以将单个数组参数中的任意数量的字符串值传递给批注,并在任何级别上放置批注。例如,以下示例代码指示将取消整个类的 deprecation 警告,而仅在 main() 方法代码内取消 unchecked 和 fallthrough 警告:

import java.util.*;

@SuppressWarnings({"deprecation"})
public class NonGenerics {

@SuppressWarnings({"unchecked","fallthrough"})
public static void main(String[] args) {
Runtime.runFinalizersOnExit();

List list = new ArrayList();
list.add("foo");
}

public static void foo() {
List list = new ArrayList();
list.add("foo");
}
}

@SuppressWarnings 是否比前两个批注更有用?绝对是这样。不过,在 JDK 1.5.0 版本中还没有完全支持该批注,如果您用 1.5.0 来尝试它,那么它将类似无操作指令。调用 -Xlint:-deprecation 也没有任何效果。Sun 没有声明什么时候将增加支持,但它暗示这将在即将推出的一个 dot 版本中实现。

更进一步

如果您试图在 Javadocs 页面中查看这些属性,那么您可能很难找到它们。它们位于核心的 java.lang 包中,但有点隐蔽,它们出现在 Javadoc 类的最底端,列在 Exceptions 和 Errors 后面。

注意到了附加在 SuppressWarnings 批注后面的陌生的批注 @Target 和 @Retention 了吗?这些称为元数据批注,它们描述了该批注在哪里适用。我将在本系列的第二篇文章中介绍它们,以及介绍如何将元数据批注应用到您自己的批注中。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-07-01
这个只是一个注解,通知编译器在编译时不进行检查,比如在类型转换时

@suppressWarnings("unchecked") java 中是什么意思
J2SE 提供的最后一个批注是 @SuppressWarnings。该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默。一点背景:J2SE 5.0 为 Java 语言增加了几个新的特性,并且和它们一起增加了许多新的警告并承诺在将来增加更多的警告。您可以为 "javac" 增加 -Xlint 参数来控制是否...

...要了解详细信息,请使用-Xlink:unchecked重新编译
图中的List没有使用泛型,所以会报不安全的警告 .@SuppressWarnings("unchecked")的意思是隐藏所有的警告信息

@SuppressWarnings("unchecked"),我不太明白这一句的意思,为什么要使用...
这是JDK1.5中新加入的Annotation语法,用来压制警告信息的。编写代码时,有时会提示一些警告(例如:使用已经废弃的类,没有加入泛型等),如果不想让程序提示这些警告信息,可以在提示警告的方法啊前加入这个配置,以压制应高信息。

Java中为什么加了@SuppressWarnings("unchecked")还是看到警告?_百度...
第一、unused 声明mList,你却没有使用 第二、unchecked 这个你已经加了 第三、rawtypes 没声明ArrayList的泛型 所以如果要彻底清除黄色警告,应该这样 SuppressWarnings({ "unused","unchecked", "rawtypes" })public class SuppressWarningsTest { public static void main(String[] args){ List<Str...

“SuppressWarnings”是什么意思呀?
释义:“SuppressWarnings”该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默。用于抑制编译器产生警告信息。示例:抑制单类型的警告:抑制多类型的警告:抑制所有类型的警告:注解目标:通过 @SuppressWarnings 的源码可知,其注解目标为类、字段、函数、函数入参、构造函数和...

“SuppressWarnings”
在编程中,SuppressWarnings是一个重要的注解,它的主要功能是向编译器传达一个指令,即对被应用该注解的代码元素内部的特定或所有警告信息保持默许,避免编译器因这些警告而打断编译过程。举个例子,如果你想针对某个代码段中的单类型警告进行抑制,可以使用@SuppressWarnings("unchecked")。如果需要处理多种...

java问题:使用了未经检查或不安全的操作。运行的时候出现如图所示的提示...
这是JDK1.5的警告,JDK1.5增加了对泛型的支持,它会对集合里面的数据进行类型检查。如果你在使用泛型的时候没有指定类型信息(List<your Object> list = new ArrayList<your Object>();其中,“your Object”即类型信息),则无法检查给出的参数是否合乎要求,就会出现unchecked警告,这并不影响运行...

@SuppressWarnings是什么意思?
SuppressWarnings的意思是:压制警告,即去除警告 。SuppressWarnings 的简介:是J2SE 5.0中标准的Annotation之一。可以标注在类、字段、方法、参数、构造方法,以及局部变量上。作用:告诉编译器忽略指定的警告,不用在编译完成后出现警告信息。使用:SuppressWarnings(“”).SuppressWarnings({}).Suppress...

JavaSE基础:@SuppressWarnings注解的使用
通过Java源代码的声明,我们可以了解到,@SuppressWarnings注解主要应用于类、字段、方法、参数、构造方法和本地变量的声明中。值得注意的是,这个注解只在编译阶段生效,不会被保留在最终的class文件中。同时,它允许你抑制的警告数量是通过一个String数组来指定的,这意味着你可以一次性抑制多个警告。为了更...

java编译说使用了未经检查或者不安全的操作
首先:java中未经检查或者不安全的操作并不是错误!!!完全可以忽视,不像看到这个的话,在class定义的前面一行加上@SuppressWarnings("unchecked")然后把,我猜是你的ArrayList这里出的问题,ArrayList相当于一个容器,jdk1.5以后再定义容器的时候要加上泛型,如果你装的是String的话,可以改成ArrayList<...

相似回答