具有未来兼容性的类不会破坏将来的修改

2022-09-03 18:14:27

我正在阅读Android的源代码,我正在使用并阅读有关该类的文档。但我不确定我是否理解其中的含义:RecyclerViewSimpleOnItemTouchListener

使用此类的另一个好处是将来的兼容性。由于接口可能会更改,我们将始终在此类上提供默认实现,以便在更新到新版本的支持库时,您的代码不会中断

这是因为 实现了 和 提供了一些默认行为吗?因此,如果更新,仍将返回默认行为。SimpleOnItemTouchListenerOnItemTouchListenerOnItemTouchListenerSimpleOnItemTouchListener

关于“如果界面可能改变”的部分。他们是在谈论?OnItemTouchListener

然而,正义似乎有空的方法,没有别的。SimpleOnItemTouchListener


答案 1

假设您有这个界面:

public interface OnItemTouchListener {
    boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e);
    void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e);
    void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept);
}

您决定自己实现它:

public class MyOwnOnItemTouchListener implements OnItemTouchListener {

    @Override
    boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
        boolean result = doSomething(e);
        return result;
    }

    @Override
    void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
        doSomethingElse(rv, e);
        doSomethingMore(rv);
    }

    @Override
    void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
        if (disallowIntercept) {
            doADifferentThing();
        }
    }
}

一切都很好...
...直到,从现在起六个月后,被修改以引入一种新的方法:OnItemTouchListener

public interface OnItemTouchListener {
    boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e);
    void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e);
    void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept);
    // New method
    void onMultiTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e);
}

突然之间,您的应用程序将不再编译


答案 2