当前位置: 首页 > 面试题库 >

Java中的不可修改列表

闻人仲渊
2023-03-14
问题内容

我试图设置一个List不可修改的。

在我的代码中,我有一个返回列表的方法。

此列表不应该修改,但我不想捕获unmodifiableList返回的异常。

private List<T> listeReferenceSelectAll = null;
List<T> oListeRet = new ArrayList<T>();
oListeRet = listeReferenceSelectAll;
return new ArrayList<T>(oListeRet);

它是现有代码,我必须对其进行转换以返回不可修改的列表,但是如果调用了“ add”方法,则不必捕获任何异常。

首先,我创建一个类,该类实现List来覆盖“ add”方法以记录异常而不是捕获异常。

但是我不知道如何正确地实例化它。


问题答案:

如果绝对必须这样做,请尝试遵循所创建列表 中java.util.List 指定的约定。

您的代码看起来像

public class UnmodifiableArrayList<E>  extends ArrayList<E> {

    public UnmodifiableArrayList(Collection<? extends E> c) {
        super(c);
    }

    public boolean add(int index) {
        return false;//Returning false as the element cannot be added 
    }

    public boolean addAll(Collection<? extends E> c) {
        return false;//Returning false as the element cannot be added 
    }

    public E remove(int index) {
        return null;//Returning null as the element cannot be removed
    }
}

在同一行上添加您需要的任何其他方法。只需 确保覆盖了所有可能在您的代码中用于修改的构造函数和方法, 以确保该列表不可修改。

使用Collections API是更干净,更好的方法,因此仅在使用Collections.UnmodifiableList无法满足您的需要时才使用此方法。

请记住,这将是调试时的噩梦,因此请尽可能多地记录日志。



 类似资料:
  • 问题内容: 我尝试了上面的代码,看是否可以重新分配最终数组的变量[ ans :it可以是]。我知道,通过最终Integer []数组,这意味着我们无法分配除拥有的Integer []之外的另一个实例。我想知道是否有可能使数组变量也不能修改。 问题答案: 据我所知这是不可能的。 但是,有一个Collections.unmodifiableList(..)方法可创建例如的不可修改视图。 如果要保证甚至

  • 问题内容: 据我所知,.NET 4.0仍然缺少只读列表。为什么框架仍然缺少此功能?这不是领域驱动设计最常见的功能之一吗? Java相对于C#的少数优点之一是采用Collections.unmodifiablelist(list)方法的形式实现的,在IList 或List 中似乎早就应该这样做了。 使用是解决问题的最简单方法- 可以使用并返回副本。 问题答案: 您正在寻找的,.NET2以来一直存在。

  • 本文向大家介绍Objective C中可修改和不可以修改类型。相关面试题,主要包含被问及Objective C中可修改和不可以修改类型。时的应答技巧和注意事项,需要的朋友参考一下 答案:可修改不可修改的集合类。这个我个人简单理解就是可动态添加修改和不可动态添加修改一样。 比如NSArray和NSMutableArray。前者在初始化后的内存控件就是固定不可变的,后者可以添加等,可以动态申请新的内存

  • 问题内容: 我在下面有此代码,并且通过执行以下行来获取ConcurrentModificationException: 代码: 堆栈是: 恰好在foreach行上: 我不明白为什么会发生此错误,因为我没有修改列表。 问题答案: 要知道,是 不是抄袭 收集数据,但只有包装原始集合在一个特殊的包装。因此,如果您修改原始集合,则会出现此错误。 如果要创建真正独立的不可修改的集合实例:

  • 我需要创建一个客户列表,每个客户都有一个工作列表。当将一个列表分配给一个客户机时,它是通过引用传递的,对列表的任何更改(例如清除列表)也会反映在客户机对象中。 我该如何避免这种情况?

  • 问题内容: 我刚刚开始使用Java中的列表。我想知道推荐的修改列表中每个元素的方法是什么? 我已经可以通过以下两种方法来完成此任务,但是它们看起来都相当简单。有没有更好的方法可以在Java中完成此操作?是否推荐以下任何一种方法,或者两者都处于同一水平? 问题答案: 第二个版本会更好。在内部,它们最后是相同的,但是第二个实际上允许您修改列表,而第一个将引发ConcurrentModification