【问题标题】:list.add(element) unsupported operation exceptionlist.add(element) 不支持的操作异常
【发布时间】:2014-04-23 15:48:39
【问题描述】:
info.add(("§eEntity Type: §f" + e.getType()));

此行引发不受支持的操作异常。 e 是 Entity 类的对象,info 是这样初始化的 List:

List<String> info = new ArrayList<String>();

为什么会这样?

完整的堆栈跟踪是:http://pastebin.com/XC996QFS (我添加了文本来识别跟踪中最有趣的行)

我正在使用的 API 在源代码顶部的注释中链接。

完整源码为:http://pastebin.com/VEQYGGrM

【问题讨论】:

  • 发布完整的堆栈跟踪。
  • 你确定它后来没有被重新分配一个值(例如从 Arrays.asList())?
  • (额外的() 有什么用?)
  • 您的堆栈跟踪很可能试图告诉您正在使用不同的 List 类。
  • 我已经编辑了 OP,其中包含指向堆栈跟踪和完整源代码的链接。我为之前如此含糊而道歉。

标签: java list arraylist


【解决方案1】:

如果要发生这种情况,那么:

info 实际上不是ArrayList,并且在某些时候分配了不同的列表(例如Collections.emptyListCollections.singletonListArrays.asList,将其包装在某种不可变列表中,等)。

e.getType() 正在抛出异常。

异常堆栈跟踪将帮助您确认是哪种情况。

【讨论】:

  • e.getType()抛出异常怎么会导致不支持的操作异常?
  • @zencv public Type getType() {throw new UnsupportedOperationException();}
  • @zencv 如果 e.getType() 本身抛出异常或调用抛出异常的方法(但间接地)。有时这些事情是如何通过非常意想不到的途径发生的,这可能令人惊讶。
  • @TimB,Sotirios 谢谢(+1)!
  • 我已经删除了所有 Arrays.asList() 位,因为它们不是必需的,并且可以很容易地用新的 ArrayList(); 替换(并且可能应该替换)。我现在将测试插件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
  • 2012-03-08
  • 2021-11-21
  • 1970-01-01
相关资源
最近更新 更多