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

有什么方法可以使普通数组在Java中不可变?

单于正业
2023-03-14
问题内容

用Google搜索它,发现了大量代码。但是他们中的任何一个都给了我我想要的。我想使一个普通数组不可变。我尝试了这个:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class test {

    public static void main(String[] args) {

        final Integer array[];

        List<Integer> temp = new ArrayList<Integer>();
        temp.add(Integer.valueOf(0));
        temp.add(Integer.valueOf(2));
        temp.add(Integer.valueOf(3));
        temp.add(Integer.valueOf(4));
        List<Integer> immutable = Collections.unmodifiableList(temp);

        array = immutable.toArray(new Integer[immutable.size()]);

        for(int i=0; i<array.length; i++)
            System.out.println(array[i]);

        array[0] = 5;

        for(int i=0; i<array.length; i++)
            System.out.println(array[i]);

    }
}

但这不起作用,我可以将5分配给array [0] …有什么方法可以使该数组不可变?


问题答案:

如果要将 其用作数组 ,则不能。

您必须为其创建包装器,以便在上引发一个异常.set(),但是没有足够的环绕将允许您在以下情况上引发异常:

array[0] = somethingElse;

当然,元素的不变性完全是另一回事!

注意: 为不支持的操作抛出的标准异常恰当地命名为UnsupportedOperationException;
由于未选中它,因此不需要在方法的throws子句中声明它。



 类似资料:
  • 问题内容: 假设我有一个方法m(),该方法将字符串数组作为参数。有什么方法可以在我打电话时直接声明该数组?即代替: 我可以只用一行代替它,而避免声明一个我永远不会使用的命名变量吗? 问题答案:

  • 问题内容: 这样的事情会使小部件正常显示: 虽然这样,将使小部件完全不显示: 问题答案: 您可能对 小部件的和方法感兴趣。在以下示例中,单击后按钮消失

  • 材料设计非常强调“纸张”的隐喻。要做到这一点,阴影是必不可少的。由于材料设计是一种理念,而不是API(尽管它内置在L中),因此应该在任何地方(Windows窗体、HTML/CSS等)进行设计。如何在Android API 14到20中做到这一点? 请注意,对于圆形和其他非方形形状,预制PNG实际上并不实用。

  • 在我的应用程序中,我试图优雅地处理当主控程序由于某些原因不可用时(例如DC之间的连接中断)的情况。在这种情况下,前端应该禁用写操作,而缓存数据库应该用于某些读操作。 我尝试使用命令。它在shell中工作,但在主程序不可用时,它不能在中工作,因为命令不在列表中。结果我有个例外: 当然,我可以处理这个异常,但它是在超时(在我的情况下是10秒)后生成的。但在我的情况下太长了。我更喜欢立即反应,如果有时会

  • 问题内容: 我有一个使用XML和反射将 s 返回到另一个类的类。 通常,这些对象是外部对象的子字段,但有时我想即时生成它。我已经尝试过类似的方法,但无济于事。我相信这是因为Java不允许你访问进行反射的方法。 如果提供的方法失败,则失败。我可以通过制作方法来解决它,或者制作另一个类来派生它。 长话短说,我只是想知道是否存在一种通过反射访问方法的方法。 问题答案: 你可以使用反射调用私有方法。修改已