2
雖然我正在編輯groovy.lang.Range帶下標運算符我有一個錯誤java.lang.UnsupportedOperationException
而java.util.List一切正常。 Groovy Range API沒有跡象表明集合是不可變的。你有什麼想法有什麼問題與我的代碼的Range \?Range爲什麼拋出UnsupportedOperationException?
的代碼如下:
def list = "a".."c"
assert list instanceof java.util.List
assert list.size() == 3
list[2] = "d"
控制檯輸出:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.set(AbstractList.java:132)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.putAt(DefaultGroovyMethods.java:6607) <6 internal calls>
at Hello.run(Hello.groovy:4) <15 internal calls>
at Hello.main(Hello.groovy) <5 internal calls>
更新:
Groovy的版本:1.8.6 JVM:1.6.0_45賣方:太陽微系統公司Inc.操作系統:Linux
'java.util.List'是一個*接口*。範圍可能不會實現所有的方法。 – Opal
[範圍'不支持'set'](https://github.com/groovy/groovy-core/blob/GROOVY_1_8_X/src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java#L6609) 。爲了實現這一點,使用'('a'..'c')。toList()'將範圍(在本例中爲ObjectRange)轉換爲列表。有關詳細信息,請參閱AbstractList http://docs.oracle.com/javase/7/docs/api/java/util/AbstractList.html#set(int,%20E)。 – dmahapatro
你確定這個班是打算可變的嗎? –