gpt4 book ai didi

java - RecyclerView的OnScrollListener是抽象类?

转载 作者:太空狗 更新时间:2023-10-29 14:08:54 25 4
gpt4 key购买 nike

RecyclerView.OnScrollListener 设为抽象类有什么好处?现在你实际上必须创建一个单独的类,而不是简单地在 Fragment/Activity...

中实现监听器的方法

这个问题在here之前被问过但答案只是引用了 Google,它似乎并没有真正回答 什么 实际有什么好处。谷歌表示:

Abstract classes allow frameworks to add new methods without breaking existing implementations.

但这一定是真的吗?向抽象类添加更多方法也会破坏现有的实现,因为如果不实现,那么扩展它的类也必须是抽象的……所以这与向接口(interface)添加方法是同样的问题。

他们更改时的差异 here还说

I also changed it to be an abstract class instead of an interface to make future changes easier.

但我还是不明白这有什么意义。有谁了解在这种情况下提供的这种变化的好处?如果真的更好,为什么所有其他监听器都实现为接口(interface)而不是抽象类?

编辑:注意类中也没有任何具体实现,所以我看不出在这里使用抽象类与接口(interface)相比没有内在的好处

最佳答案

创建一个没有方法实现的空白抽象类有几个优点。

将其抽象化的第一个原因是您无法创建对象本身。你总是必须有一个扩展它的类,这意味着你不能真的不小心创建一个。 (尽管您总是可以直接使用 new RecyclerView.OnScrollListener(){},所以在这种情况下这可能不是优势)。

如果有很多方法,但你只需要实现一个,你只需要重写一个方法,而不是重写所有方法并留空。通常这是通过拥有一个接口(interface)然后拥有一个实现该接口(interface)的抽象类来完成的,这样您就可以挑选适合您的版本。这次他们显然选择不这样做。

他们在您的问题中提到的最后一个优势是,如果开发人员添加方法,他们将不会破坏现有代码。 RecyclerView 目前仍在开发中,它是支持库的一部分,这意味着它不是官方 Android 版本的一部分。 OnScrollListener() 目前有两个方法,onScrollChanged()onScrolled()。如果它是一个接口(interface),您将被迫重写这两种方法才能进行编译。现在,六个月后,他们决定添加更多功能,例如 onScrolling()。当您更新支持库时,您的代码突然无法编译。您必须遍历每个使用 onScrollListener() 的文件并添加这个您一开始甚至没有使用的新方法。保持类抽象意味着他们可以随意添加方法,并且现有代码不会停止编译。

唯一真正的缺点是您不能像添加 OnClickListener 那样将其添加到 ActivityFragment 中,因此您必须将其设为内部类或匿名类。

关于java - RecyclerView的OnScrollListener是抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30623127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com