- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
谁能给我解释一下@SuppressWarnings
和@SuppressLint
之间的区别?我们什么时候应该使用一个而不是另一个?
我已经阅读了文档,但仍然不明白其中的区别。使用示例/示例代码进行解释将不胜感激。谢谢。
最佳答案
实际上有 两个 lints:一个属于编译器,因此是特定于 Java 的,一个属于 Google,是特定于 Android 的。
如果您的警告是关于 Java 中不特定于 Android 的内容,它会被 @SuppressWarnings
抑制,如果它是特定于 Android 的,它会被 @SuppressLint
.
此处列出了 Lint 警告:http://tools.android.com/tips/lint-checks
假设您有一个关于缺少权限的警告,并且警告描述开始于“此检查扫描您的代码和库并查看正在使用的 API,并根据访问这些 API 所需的权限集进行检查”在上面链接的 lint 警告页面中,我们发现了这一点:
MissingPermission
Summary: Missing Permissions
Priority: 9 / 10 Severity: Error Category: Correctness
This check scans through your code and libraries and looks at the APIs being used, and checks this against the set of permissions required to access those APIs. If the code using those APIs is called at runtime, then the program will crash.
Furthermore, for permissions that are revocable (with targetSdkVersion 23), client code must also be prepared to handle the calls throwing an exception if the user rejects the request for permission at runtime.
因此,为了抑制这一点,我们在代码上添加了这个注释:
@SuppressLint("MissingPermission")
假设我们发现了这个警告:
“未经检查的转换:'java.lang.Object' 到 'java.lang.Integer' ...”
如果您在 Android Studio 的悬停弹出窗口中阅读本文,末尾有一个 More...
链接。当您单击 More...
链接时,文本会展开,您会在底部找到它:
“提示:将 -Xlint:unchecked 传递给 javac 以获得更多详细信息。”
这告诉您可以在注释中使用“unchecked”,如下所示:
@SuppressWarnings("unchecked")
要获得编译器警告列表,请运行 javac -X
:
C:\>javac -X
-Xlint Enable recommended warnings
-Xlint:{all,auxiliaryclass,cast,classfile,deprecation,dep-ann,divzero,empty,fallthrough,finally,options,overloads,overrides,path,processing,rawtypes,serial,static,try,unchecked,varargs,-auxiliaryclass,-cast,-classfile,-deprecation,-dep-ann,-divzero,-empty,-fallthrough,-finally,-options,-overloads,-overrides,-path,-processing,-rawtypes,-serial,-static,-try,-unchecked,-varargs,none} Enable or disable specific warnings
.
.
.
这些是您可以在 @SuppressWarnings
中使用的值。
关于java - @SuppressWarnings 与@SuppressLint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40126565/
这个问题已经有答案了: @SuppressWarnings("serial") (2 个回答) 已关闭 6 年前。 为什么使用注释:@SuppressWarnings("serial") 在带有 Sp
当我查看SuppressWarnings.java时,我看到这个注解的参数限制是String[],但是为什么我们通常会这样写呢? (例如:@SuppressWarnings({"ratypes", "
我现在多次遇到这个问题,并且总是通过一些强制转换和 @SuppressWarnings 来解决这个问题。注释。 相关接口(interface)/抽象类: public abstract class D
我正在使用一个名为 Weka 的开源 Java 库在 Eclipse Indigo 项目中。该库似乎有点过时,因此 Eclipse 向我显示了数千条有关其代码的警告。一个典型的例子是: ArrayLi
哪个参数 @SuppressWarnings 用于隐藏 Warning(209.56):静态变量应该由类型名称 javax.swing.ListSelectionModel 而非表达式限定? 最佳答案
假设我有一个生成警告的注解。注释在方法上。 例如 @AnnotationThatGeneratesAWarning public void doSomething() { //stuff } 我可
我有以下代码 ParameterExpression[] searchStrings = new ParameterExpression[10]; 这有效,但会发出警告,指出我正在执行“未经检查”操作
我有一个返回值的静态方法 Magic Constant .每次我访问我的代码中的方法时,我都会收到这样的警告: Must be one of: Toast.LENGTH_SHORT, Toast.LE
我很困惑@SuppressWarnings 是如何在内部工作的。如果我们看到它的源代码,它是这样的: @Retention(SOURCE) @Target({TYPE, FIELD, METHOD,
在某个地方,我有一个带有通用“VT extends String”的方法。显然这会产生一个警告:类型参数 VT 不应受最终类型 String 的限制。 Final 类型无法进一步扩展。 您知道是否有办
有没有一种方法可以避免使用下面的 @SuppressWarnings 并在没有警告的情况下保持相同的功能 'Type safety: Unchecked cast from AbstractDO[]
为了试验 @SuppressWarnings 注解,我编写了以下示例程序: public class Test { public static void main(String[] args)
@SuppressWarnings 注释用于更简洁的代码,或者添加它是否有任何性能提升或优势? 或者我们可以通过这样做来减少编译时间。 最佳答案 @SuppressWarnings 注释类型允许 Ja
我有课 abstract class A { //.... } class B extends A { //.... } class C extends A { //....
我目前有一个枚举,它有一个可以接受 null 并包含以下 SuppressWarning 注释的构造函数: @SuppressWarnings("all") public enum TheEnum {
我有一个问题,因为我有点困惑(或者我没有注意到一些明显的事情)。假设我有一些包含很多类的源代码,这些类包含大量像这样定义的静态字段: public final class ConverterTYPE
Java 中的 @SuppressWarnings 注解指示被该注解修饰的程序元素(以及该程序元素中的所有子元素)取消显示指定的编译器警告,且会一直作用于该程序元素的所有子元素。例如,使用 @Supp
我将 Eclipse 配置为在缺少公共(public)元素的 javadoc 注释和标签时显示警告。这对我来说非常有用,可以很好地记录我的代码。 但有时我有一个类,我有几个常量描述例如 DFA 的状态
我有一个用于将对象持久保存到磁盘的 Cache 对象,我实现它的方式导致我不得不使用 @SupressWarnings 。我不是 Java 专家,但这似乎是一种代码异味,我想知道是否有“更好”的方法来
我正在尝试创建一个对象列表,这些对象是模型对象的扩展。实例是使用给定的 Class 对象创建的。 public class ModelFactory { public static final
我是一名优秀的程序员,十分优秀!