使用Eclipse的Null分析:
可以将其他方法定义为初始化方法而不是构造函数吗?
我有一个这样的课程:
public class Foo {
@NonNull
private Object fooObject;
public Foo() {
super();
}
public void onCreate() {
fooObject = //Something which is not available in the Constructor;
}
这里我得到的警告是NonNull字段可能尚未初始化。是否有可能将init-method声明为初始化方法?
我可以使用@SuppressWarnings(“null”)作为构造函数。但后来我忽略了所有可能在某处实现的领域。
我看到的第二个机会是将fooObject设为@Nullable - 但是每次使用fooObject时我都需要检查null。
那么还有更好的解决方案吗?
答案 0 :(得分:1)
超出构造函数的空检查对象初始化本身就很困难。存在几种复杂的方法,所有方法都需要额外的注释。
在你的例子中,向编译器证明在访问字段之前总是调用onCreate()似乎几乎是不可能的。
已经提出了一个较弱的解决方案:@LazyNonNull,一个在最初为null的字段上使用的注释,但一旦初始化就永远不会返回null。见https://bugs.eclipse.org/bugs/show_bug.cgi?id=414237
显然,在调用构造函数(带参数)之前收集所有必要值的静态工厂方法将更容易实现。