RandomAccessSubList não serializável

Caso você tenha se deparado com o seguinte erro:

java.io.NotSerializableException: java.util.RandomAccessSubList at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)

Em ambientes clusterizados ou ao serializar algum objeto, significa que você está utilizando um atributo de classe não serializável. Entretanto é um pouco complicado identificar onde está o erro, já que esse tipo de erro, normalmente não ocorre quando você instancia um objeto e sim quando você utiliza o método subList da classe List que por algum motivo obscuro faz uso da classe java.util.RandomAccessSubList que não é serializável. Para resolver esse problema, basta empacotar o retorno do subList dentro de uma classe serializável:

atributoComSubList = new ArrayList(lista.subList(inicio,fim));

Problema resolvido!

Sobre: Thiago Galbiatti Vespa

Thiago Galbiatti Vespa é mestre em Ciências da Computação e Matemática Computacional pela USP e bacharel em Ciências da Computação pela UNESP. Coordenador de projetos do JavaNoroeste, membro do JCP (Java Community Process), consultor Oracle, arquiteto de software de empresas de médio e grande porte, palestrante de vários eventos e colaborador de projetos open source. Possui as certificações: Oracle Certified Master, Java EE 5 Enterprise Architect – Step 1, 2 and 3; Oracle WebCenter Portal 11g Certified Implementation Specialist; Oracle Service Oriented Architecture Infrastructure Implementation Certified Expert; Oracle Certified Professional, Java EE 5 Web Services Developer; Oracle Certified Expert, NetBeans Integrated Development Environment 6.1 Programmer; Oracle Certified Professional, Java Programmer; Oracle Certified Associate, Java SE 5/SE 6