Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Ocorreu uma java.io.InvalidClassException - no valid constructor

Ocorreu essa exceção quando estava fazendo o exercício de serialização com herança. Gerou o arquivo, mas na gora de imprimir o saldo e nome do titular ocorreu a exceção ( java.io.InvalidClassException br.com.bytebank.banco.modelo.ContaCorrente; no valid constructor). Não consegui achar o problema no contrutor da classe ContaCorrente.

package br.com.bytebank.banco.modelo;

import java.io.Serializable;

//new ContaCorrente()
public class ContaCorrente extends Conta implements Tributavel, Serializable {

    public ContaCorrente(int agencia, int numero) {
        super(agencia, numero);
    }

    @Override
    public void saca(double valor) throws SaldoInsuficienteException{
        double valorASacar = valor + 0.2;
        super.saca(valorASacar);
    }

    @Override
    public void deposita(double valor) {
        super.saldo += valor;
    }

    @Override
    public double getValorImposto() {    
        return super.saldo * 0.01;
    }

    @Override
    public String toString() {
        return "ContaCorrente, " + super.toString();
    }

}

package br.com.bytebank.banco.test.io;

import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.ObjectInputStream;

import br.com.bytebank.banco.modelo.ContaCorrente;

public class TestDeserie {

public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {

    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("cc.bin"));
    ContaCorrente cc = (ContaCorrente) ois.readObject();
    ois.close();

    System.out.println(cc.getSaldo());
    System.out.println(cc.getTitular().getNome());

}

}

4 respostas

Olá Renan!

Já tentou usar um construtor vazio? Pode ser que funcione!

Aguardo seu retorno! ^^

Oi Guilherme!

Ainda não tentei...mas os exemplos das aulas e todos os exercícios foram feitos com esse construtor e não tiveram problema. Por isso gostaria de descobrir o que fiz de errado.

solução!

Implementei novamente a interface Serializable nas classes certas (conta e cliente.) retirei da classe ContaCorrente. Aconteceu uma outra exceção ...NullPointer...não havia colocado o valor do titular da conta. Após colocar o valor funcionou. Eu resolvi o problema sem mexer no construtor e também não consegui reproduzir o erro novamente. Ainda não entendi muito bem o que aconteceu..

Também fiquei confuso Renan kkk Mas que bom que deu certo!

Qualquer coisa, só abrir outro tópico blz?

Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software