尝试将子类的实例添加到Grails 2.3.9中的列表时,UnsupportedOperationException

时间:2014-07-03 18:55:21

标签: grails

我有3个子域扩展父域,如下所示:

Dog extends Animal
Cat extends Animal
Snake extends Animal

在我的一项服务中,我有一个List<Animal>,我正在尝试添加对象(类狗,猫和蛇),如下所示:

List<Animal> animals = Dogs.findAllByBreed("someBreed")
             animals << Cats.findAllBySomething("something")
animals = [animals].flatten()

它在run-app上运行良好,我没有得到任何错误。但是,在测试应用程序中,我得到UnsupportedOperationException,我觉得有点奇怪。

有人能说出什么问题吗?我以为它应该是可能的,因为狗和猫都是动物。我应该更新它们共有的值,但测试失败了。下面是堆栈跟踪。

java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(AbstractList.java:148)
    at java.util.AbstractList.add(AbstractList.java:108)
    at ...

2 个答案:

答案 0 :(得分:0)

你确定Dog ---> Dogs.findByBreed("someBreed")有效吗?我以前从未见过这种复数符号......

无论如何,我建议将原始列表包装成ArrayList

List animals = new ArrayList( Dog.findAllByBreed("someBreed") )
     animals.addAll Cat.findAllBySomething("something")

答案 1 :(得分:0)

而不是:

List<Animal> animals = Dogs.findAllByBreed("someBreed")
animals << Cats.findAllBySomething("something")
animals = [animals].flatten()

试试这个:

List<Animal> animals = Dogs.findAllByBreed("someBreed")
animals += Cats.findAllBySomething("something")

当您使用animals << Cats.findAllBySomething("something")时,您要向List<Cat>添加List<Animal>,这是无效的。您应该能够将Cat个实例添加到List<Animal>,但无法将List添加到List<Animal>。当您使用+=时,您要将List<Cat>的元素添加到List<Animal>,这可能是您想要的。