Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么可以';您是否在活动之间传递列表(而不是ArrayList)?_Java_Android_Android Activity - Fatal编程技术网

Java 为什么可以';您是否在活动之间传递列表(而不是ArrayList)?

Java 为什么可以';您是否在活动之间传递列表(而不是ArrayList)?,java,android,android-activity,Java,Android,Android Activity,据我所知,如果List不是ArrayList,就无法在活动之间传递简单的List对象。我是否错过了这样做的方法?如果没有,有人知道谷歌为什么会强迫用户在代码中使用特定于实现的细节吗?您可以传递显式实现,因为它们实现了可序列化,而它们的抽象和接口则没有 列表和其他集合不可序列化,因为这不是它们的定义。它们提供了对其实现的选择,因为您还拥有不可序列化的列表实现 这一点很重要,因为您可能希望在列表中保存不是为序列化而保存的数据。在这些情况下,您可以选择更适合此数据的实现,而不是被“列表”强制进行序列化

据我所知,如果
List
不是
ArrayList
,就无法在活动之间传递简单的
List
对象。我是否错过了这样做的方法?如果没有,有人知道谷歌为什么会强迫用户在代码中使用特定于实现的细节吗?

您可以传递显式实现,因为它们实现了可序列化,而它们的抽象和接口则没有

列表和其他集合不可序列化,因为这不是它们的定义。它们提供了对其实现的选择,因为您还拥有不可序列化的列表实现


这一点很重要,因为您可能希望在列表中保存不是为序列化而保存的数据。在这些情况下,您可以选择更适合此数据的实现,而不是被“列表”强制进行序列化。

因为有一个类可以用来存储这些或更多内容的引用。

我不知道,但我打赌,对于大型数组,做块内存拷贝比创建一个全新的数据结构,比如说一个链表,然后把每个对象都拷贝过来要有效得多。我同意w/Greg。。他们可能已经优化了那个特定的implementation@RhinoFeeder对不起,误读了这篇文章。删除了我以前的评论可能值得一提,因为下面的另一个回复说,你可能做错了。你有没有考虑过使用一个可以从程序的其他部分直接访问的应用程序范围的列表?第三段是我在这个主题上的重点。这是有道理的。因此,由于我们在Android中处理这个对象的本质,我们需要一个
可序列化的
,这意味着我们需要准确地调用
列表
的实现。为了将对象从一个活动传递到另一个活动,您需要可序列化(或可打包,请将其用于您自己的对象),因为这不可能通过引用实现。Serializable仅在特定实现上实现,而不是在接口/摘要上实现。这是因为列表并不总是希望是可序列化的。关于这两个要求的“什么”和“为什么”可能在互联网上都有详细的解释,所以你应该仔细阅读。听起来很棒,最后一个简单的问题。这样做是否可以接受/良好做法//驱动程序实现可包裹列表驱动程序;受保护的void onSaveInstanceState(Bundle out){outstate.putParcelableArrayList(KEY,new ArrayList(drivers));}应该可以正常工作,但如果以后还需要使用实现,则不知道是否有任何理由继续使用接口
List
。也许最好从一开始就选择最好的实现并坚持下去。针对接口编程是一种最佳实践,但通常并不实用。如果你真的想因为某种原因继续使用接口,你可以考虑只以不同的方式在活动之间获取数据。例如,您可以将数据持久化到数据库中,并在需要时再次获取它们。