2

我想制作一个由方法调用返回的 List 的浅表副本(它是来自 Android 的公共 List getScanResults (),请参阅http://developer.android.com/reference/android/net/wifi/WifiManager.html# getScanResults%28%29 )。问题是,clone() 没有在 List 接口上定义,而只是在像 ArrayList 这样的具体类上定义 - 但是我不知道 getScanResults() 在内部使用什么,所以我不能简单地转换它或者我错了这个?然后我想到了类似的东西

anExistingList.add(getScanResults());

但是 getScanResults() 似乎返回 null 而不是一个空列表,如果没有什么可以返回,所以这也是没有选择的。当我会做类似的事情时

if(getScanResults() != null)
    anExistingList.add(getScanResults());

getScanResults() 的返回值可能会在第一行代码行和第二行代码行之间发生变化,因此它可以先通过“不等于空”条件,然后在第二行中为空,还是我错了?

那么,我将如何制作 getScanResults() 的返回值的浅表副本或只是制定我的目标:从 getScanResults() 获取值并确保它在我使用它时不会改变?

感谢您的任何提示:-)(我想我只是理解错了)

4

3 回答 3

1

这里。提供将内容从一个列表复制到另一个列表java.util.Collections的静态方法。copy

于 2011-05-11T16:04:07.663 回答
1

所有表现良好的集合都有复制构造函数。因此,根据您的需要(例如快速索引或有效删除某些元素)创建您想要的列表类型的实例。

在这种情况下,您必须做更多的事情来处理可能的 null 带来的不便。所以是这样的:

/**
 * @return a copy of the original; an empty list if original is null.
 */
public static <T> List<T> randomAccessibleCopy(List<T> original) {
    return (null == original) 
             ? Collections.<T>emptyList() 
             : new ArrayList<T>(original);
}

现在您可以使用返回列表的底层 API 的结果调用此方法。

于 2011-05-11T16:11:27.930 回答
0
if(getScanResults() != null)
    anExistingList.add(getScanResults());

应该

List x = getScanResults();
if(x != null)
    anExistingList.add(x);

由于该方法现在只被调用一次,因此在此期间不能更改。

于 2011-05-11T16:12:12.393 回答