- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我决定编辑我的问题,在看到 1 年后,我改变了我处理空值的方式:
@Nullable
来告诉一个值可以为空。毕竟,空值应该少于非空值。Optional
,因此允许以下操作:Optional.ofNullable(value).orElseGet(() -> 1);
。它没有击败 Groovy 的 ?:
和 ?.
运算符,但是 Optional 提供了一些不错的工具,如 map
、filter
,等等。而且,至于我的代码:
构造函数使用 Objects.requireNonNull
检查空值,如下所示:
公共(public) Foobar(字符串 a){ this.a = Objects.requireNonNull(a, "a");
每当我在项目或 Objects.requireNonNull
中使用 Guava 框架时,方法都会使用 Preconditions.checkNotNull
检查空值:
public void foobar(String a) { Preconditions.checkNotNull(a, "a");
使用其中一个取决于我是否重用该值。
我不会每次都检查方法参数,而是主要在 public
方法中检查。我的想法不是替换默认的运行时检查,它比我能做的更有效地抛出 NullPointerException
。
我目前在所有参数、字段、方法结果(返回)上使用 @Nonnull
或 @Nullable
注释,但我想知道什么是真正最好的:
@ParameterAreNonnullByDefault
对它们不起作用)。我想要一种可移植的方式(我有 read here 我可以创建自己的注释,具有特定的名称,这适用于 findbugs)@ParameterAreNonnullByDefault
注释包 com.foobar
,它是否也适用于 com.foobar.example
?@Nonnull
注释时,我是否应该检查每个参数(我目前正在检查构造函数参数)?此外,从 Eclipse 3.8 开始,有基于注释的空值检查。但我对一些“简单”的案例有疑问:
@ParameterAreNonnullByDefault
class Foobar<E extends Throwable> {
@Nullable private Constructor<E> one;
@Nullable private Constructor<E> two;
public Foobar(Constructor<E> one, @Nullable Constructor<E> two) {
this.one = Objects.requireNonNull(one, "one");
this.two = two;
}
// don't care about exceptions.
public E getInstance(String msg, Throwable t) {
if (null == two) {
return (E)one.newInstance(msg).initCause(t);
}
return two.newInstance(msg, t);
}
}
为什么告诉我 two 在那个位置可以为 null,为什么他警告我对 two 的潜在 null 访问?
最佳答案
就 getInstance
中的 two
变量的警告而言,null 分析不够聪明,无法确定该字段不能为 null。您可以使用局部变量解决此问题:
public E getInstance(String msg, Throwable t) {
final Constructor<E> localTwo = two;
if (null == localTwo) {
return (E)one.newInstance(msg).initCause(t);
}
return localTwo.newInstance(msg, t);
}
在 Preferences > Java > Compiler > Errors/Warnings > Null analysis
中有一个设置Enable syntactic null analysis for fields
,它允许这样的代码:
if (two != null) {
return two.newInstance(msg, t);
}
没有警告。
关于java - JSR-308 : Clarification on Nonnull, ParameterAreNonnullByDefault 以及 Eclipse Kepler 检测它的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21800256/
我无法从 Eclipse 访问互联网,因此无法使用更新站点添加软件。我尝试了几种不同的方法,但似乎都不起作用。 我正在使用 JBoss Dev Studio 版本的 kepler,但我认为这可能是一个
在 Fermi 中,我们可以启动 16 个并发内核。我们可以在 Kepler 中启动多少个内核?数量相同还是他们也增加了这个数量? 最佳答案 并发内核数从 16 增加到 32 for devices
谁能告诉我如何在 中打开两个或多个文件编辑器? eclipse 开普勒 ? 在 helios 之前的版本中,它可以通过快捷方式 打开。 ctrl + 8 . 在 中看起来像这样赫利俄斯 但在 开普勒我
当我启动 eclipse 时,在启动加载窗口中,eclise 自动退出并出现错误: !SESSION 2013-09-05 14:52:04.771 -----------------
我目前在 Windows 7 上使用 Eclipse Kepler。以前我可以进入工作区屏幕来应用我想要使用的工作区,但由于某种原因,当我启动 Eclipse 时,我现在看到 Kepler 的启动屏幕
我正在使用带有java8和ubuntu 14.04的Kepler eclipse。Eclipse向我显示了java预定义类和方法的建议。但它没有显示我声明的类/方法的建议。我已经搜索并找到了Windo
我已成功将 Eclipse Juno 连接到互联网。为了实现这一点,stackoverflow 上有很多帖子。这是此链接之一: Eclipse not connecting to internet v
就在上周,我在 eclipse (K) 中使用插件管理器安装了 egit。现在,我想安装 ObjectAid。只是,我的存储库(即使是标准存储库)都无法连接。 "Could not find... u
前言 1 简介 Kepler.gl作为一款强大的开源地理信息数据可视化工具,可以帮助我们轻松制作针对大规模矢量数据的可视化作品,从而辅助数据分析工作。 Kepler.gl制作常规地图非常简单方
dynamic parallelism的资料很少Kepler的,从这项新技术的描述来看,是否意味着解决了同一个warp中线程控制流发散的问题? 它允许 recursion和从设备代码午餐内核,是否意味
我想知道 Eclipse Kepler 中的消息“项目共享事件更新”是什么? THC. 最佳答案 为了其他从谷歌偶然发现这个问题的人的利益,请在此处查看 mwhs 的答案,这对我来说非常有用: htt
我目前正在将 64 位 Kepler 与 IBM Websphere Developer Tools 一起使用,但它运行速度很慢。 eclipse 进程经常使用 800M - 1.2G 并且它不时卡住
我遇到了 Eclipse 的问题。 它一次次崩溃(每天4-5次),没有任何错误! (CPU 使用率也正常),但我什么也做不了——在 Eclipse 中单击或写入,或关闭此应用程序。只有在进程管理器中杀
我安装了新版本的eclipse Kepler而不是Indigo。我当前的操作系统是Ubuntu 12.04。 一切看起来都很好,并且将Ubuntu更新设置为与Indigo相同。 但是当我尝试运行简单的
我已经安装了 Eclipse Kepler(构建 ID:20130614-0229)。当我尝试编译我的项目时,我遇到了大量与 JPA 相关的错误。我猜它们来自 Dali Java Persistenc
我正在开发一个枚举,其中包含用于处理 pop3 的命令,因此我想存储将在枚举中的每个命令执行的过程。这就是我构建的: 现在,当我尝试编辑时,我的 Eclipse 代码完成功能无法正常工作其中之一 @
我的 Eclipse Kepler 遇到问题。在我的 Java 项目中,我收到了一些警告,现在它们在项目资源管理器中显示为错误标记(红叉)。 看起来像这张图片 /image/H8j7f.png 所以我
我已经下载了 Eclipse Kepler 但无法启动,当我尝试打开(启动 eclipse)时出现错误:“无法加载 C:/Java/..../bin/client/jvm.dll”,在尝试找到解决方案
我有一个 Dropbox 工作区,最近(以前从未发生过这种情况),我回到家(我在学校也在 Dropbox 工作区中编辑了一些代码),现在每次我使用该工作区时 Eclipse 都会崩溃,但不是任何一个我
我昨天关闭了我的机器,今天早上启动我的 Eclipse 时,它加载时没有任何我的项目。我尝试对其进行清理,但无济于事。也在以下路径下 workspace\.metadata\.plugins\or
我是一名优秀的程序员,十分优秀!