【发布时间】:2017-04-07 06:26:29
【问题描述】:
鉴于下面的示例代码,有没有一种方法可以初始化 total,这样我以后使用它时就不必进行空值检查。我无法将值传递给构造函数。
public class SampleCode
{
private WeakReference<Float> total;
public SampleCode() {
}
public void setWidget(Float total) {
this.total = new WeakReference<>(total);
}
public float calculatePercentage(Float count) {
if (total == null) {
return -1;
}
if (total.get() == null) {
return -1;
}
return count / total.get();
}
}
我想在构造函数中做这样的事情:
this.total = new WeakReference<>(null);
但这不起作用。我可以在发布状态下初始化 WeakReference 还是违背了类的目的?
谢谢
编辑
感谢所有反馈。
- 使用浮点数是为了简化问题,但我完全可以理解其中的困惑。弱引用实际持有的对象是 Android 布局中的视图,并且此类存在于活动生命周期之外。
- total.get() 应在计算之前分配给本地值
- “这不起作用”的声明涉及:
total.get() == null 在使用 this.total = new WeakReference<>(null); 初始化后评估为 false
我现在明白这种说法是不正确的。这将评估为真。但是我认为最好不要将其初始化为 null 并在访问之前检查 null 条件。
【问题讨论】:
-
你在ctor中初始化它不起作用是什么意思?
-
您似乎在这里提出了不止一个问题。一个是关于避免 null 检查,另一个是关于在 null/released 状态下初始化。
-
为什么?为什么使用
WeakReference?为什么使用Float?为什么不是float? -
@running-codebase 正如 EJP 在 cmets 中所说,您包含的代码不需要 WeakReference,只需使用原始浮点数即可。但是您仍然参考我对 WeakReference 的一般用法的回答 stackoverflow.com/a/43271770/504133
-
@nits.kk 为了清晰起见,我添加了一些编辑。 Float 的使用旨在简化代码,以专注于如何正确地使用空值初始化 WeakReference。我能理解我造成的混乱。感谢您的反馈。
标签: java weak-references