- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我对这些注释的正确使用感到困惑。
android.support.annotation.NonNull;
android.support.annotation.Nullable;
@NonNull
文档中的信息说:
Denotes that a parameter, field or method return value can never be null.
对于参数,当没有什么可以阻止您传递 null
时,这意味着什么?
例如,假设我有一个类 MyObject
,并且一个实例可能有也可能没有标题。
public final class MyObject {
private String title = null;
public void setTitle(String title) {
if (title == null)
throw new NullPointerException();
this.title = title;
}
public void clearTitle() {
title = null;
}
}
这里我使用 null
来表示没有标题,但这是一个实现细节,所以我不想要一个单一的方法来设置和清除标题。
如果我将字段 title
标记为 @Nullable
,android studio 告诉我 setTitle
的参数可能应该标记为 @Nullable
也是(但这与我想要的相反)。
如果我将 setTitle
方法的参数标记为 @NonNull
,我会收到一条警告,指出条件 title == null
始终是 假
。
在这种情况下,这些注释的正确用法是什么?如果 @NonNull
表示参数不能永远不会为 null
使用它来表示不应该是错误的吗空
?如果是,是否有正确的方式来表明这一点?
最佳答案
关键是这个注解是某种契约,所以如果你正确地注解了你的方法,你就不需要进行检查。 Android Studio 会检查您是否弄乱了它。您仍然可以忽略它,但这会导致编译器警告。
如果您忽略无用的(根据契约(Contract))安全检查,它将正确地抛出 nullpointerexceptions。但是开发人员收到了您的注释警告。
关于java - @NonNull 和@Nullable 的正确用法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32025902/
我正在使用 IntelliJ 13.1.5 和 Java 8 SDK,我已经设置了 IntelliJ 内置的空性检查器以使用 checkers.nullness.quals.NonNull 作为我选择
Lombok's @NonNull VS javax.annotation.Nonnull 哪个更适合用于方法参数以及何时使用? The answer here模糊地比较了所有注释,但无法推断出哪一个
这两个注解有什么区别? org.jetbrains.annotations.NonNull android.support.annotation.NonNull kotlin 编译器 IntelliJ
这是我的数据代码: import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.Primary
Java 允许将参数和返回标记为 @Nonnull。 对我来说,这感觉是一种不好的做法,我不想在 99% 的用例中告诉它它不应该为 null 并用无用的噪音污染代码。 相反,我更愿意告诉它 - 给定包
我要安装Pushe plugin对于 flutter ,但我遇到了这个错误: 我什至将这一行添加到 native 导入中: 导入 android.support.annotation.NonNull;
我想我会更深入地研究旧的 Java 功能,例如注释。我遇到了 Java 8 类型注释,它使我们能够扩展 Java 类型系统。IntelliJ 注释库或 Checkerframework 中最常见的注释
我的 Controller 中有以下方法: @PostMapping("/register") public String registerNewUser(@Valid User user,
我是 @Nonnull 注释的新手。 我尝试使用它并编写了以下测试: public class TestNonull{ public static void doSmth(@Nonnull I
我不明白 NonNull 注释应该如何提供帮助。所以,假设我有这个: void noNullArg(@NonNull Object o) { // stuff } 如果我这样做,我会收到一条关
我的类的一个 String 成员变量是 Optional。用 Lombok 注释 @NonNull 标记它是否有意义? 如果成员变量是Map而不是String,我想问同样的问题。答案会改变吗? 最佳答
我正在使用 org.eclipse.jdt.annotation.NonNull 为静态空值分析添加额外信息。我不知道如何正确注释数组: 我怎么能说数组引用是非空的? 我怎么能说数组由非空元素组成?
虽然我认为应该有一个关于是否继承注释的通用规则,但我特别感兴趣的是让 FindBugs 识别我的规则,所以这个问题是 FindBugs 特定的。 据我所知,JavaDoc 注释取自接口(interfa
我的问题是 this one 的后续问题。 . 在过去的 FindBugs 版本中,可以使用 @DefaultAnnotation(Nonnull.class) 或 @DefaultAnnotatio
@nonnull inflater 错误,谁能解决这个错误?我是 android 的新手,我不知道如何解决这个错误的任何解决方案?是主题错误还是其他原因,我的代码有什么大问题吗??你能解决这个错误吗?
这个问题在这里已经有了答案: Non-nullable string type, how to use with Asp.Net Core options (1 个回答) 2年前关闭。 我有一个在 E
我知道使用方法nonnull和 nullable是 nonnull: the value won’t be nil; bridges to a regular reference. nullable:
我在这段代码上遇到了这个错误。 You must annotate primary keys with @NonNull. "uidString" is nullable.当我用@NonNull 和@
这个问题在这里已经有了答案: Meaning of Android Studio error: Not annotated parameter overrides @NonNull paramete
我想在我的应用程序中使用 FindBugs 来检测空指针故障,我关心的是代码 public class Test { public static void main(String[] args
我是一名优秀的程序员,十分优秀!