我有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 ...
你确定,Dog ---> Dogs.findByBreed("someBreed")
工作吗?我以前从未见过这种复数符号…
无论如何,我建议将原始列表包装成ArrayList
List animals = new ArrayList( Dog.findAllByBreed("someBreed") )
animals.addAll Cat.findAllBySomething("something")
而不是:
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>
中,这可能是您想要的。