为什么在WeakReference Text View实例之后使用get()方法?
private WeakReference<TextView> mTitleText;
private TextView mAuthorText;
FetchBook(TextView titleText, TextView authorText) {
this.mTitleText = new WeakReference<>(titleText);
this.mAuthorText = authorText;
//in weakPreference Text View
mTitleText.get().setText("hello");
//in standard text view
authorText.setText("by by ");
}
为什么没有get()
方法就不能在弱引用中直接设置textView的文本?
答案 0 :(得分:2)
就编译器而言,类型WeakReference<TextView>
与TextView
完全无关。 WeakReference
是与TextView
完全不同的类。
考虑以下代码:
Foo<T> {
private T bar;
public T get() { return bar; }
public Foo(T bar) {
this.bar = bar;
}
}
class Bar {
public void func() {}
}
...
Foo<Bar> foo = new Foo(new Bar());
您基本上是在问
为什么我不能直接打
foo.func()
?为什么我必须打电话给foo.get().func()
?
因为func
是在Bar
中声明的,而不是在Foo
中声明的。并且foo.get()
返回Bar
的实例,您可以使用它来调用func
。
setText
在TextView
中声明,而不是在WeakReference
中声明。 WeakReference.get
为您提供了TextView
的实例,您可以使用它来调用setText
。