为什么在弱引用对象实例之后(例如文本视图)使用get()方法?

时间:2019-01-25 07:53:06

标签: java android weak-references

为什么在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的文本?

1 个答案:

答案 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

setTextTextView中声明,而不是在WeakReference中声明。 WeakReference.get为您提供了TextView的实例,您可以使用它来调用setText