1
resposta

Try Catch com UnsupportedOperationException

Pessoal,

Dúvida boba, eu adicionei o UnsupportedOperationException no método .getAulas e usei um Try-Catch para não parar o programa. Mas porque a mensagem "null" foi parar na primeira linha?

package br.com.alura;

import java.util.ArrayList;
import java.util.List;

public class TestaCurso {

    public static void main(String[] args) {
        Curso curso01 = new Curso("Aprendendo POO em Java", "Paulo Vieira");
        List<Aula> aulas = curso01.getAulas(); // A melhor forma de declarar o tipo de referencia de uma nova lista é
                                                // deixando-a mais genérica possível

        curso01.adiciona((new Aula("Aula01", 21)));
        curso01.adiciona((new Aula("Aula02", 15)));
        curso01.adiciona((new Aula("Aula03", 36)));
        try {
            curso01.getAulas().add(new Aula("Aula04", 20)); // Esse é o jeito menos elegante de adicionar
        } catch (UnsupportedOperationException e) {
            System.out.println(e.getMessage());
        }

        System.out.println(curso01.getAulas());
        System.out.println(aulas.toString());

//        O método getAulas() da classe Curso retorna a referência para a lista de objetos do tipo Aula armazenados no objeto Curso. 
//        Quando você chama System.out.println(curso01.getAulas()), você está imprimindo a referência para essa lista de objetos. 
//        Como a classe ArrayList (que é a implementação utilizada pela lista aulas) tem uma implementação do método toString() que imprime os elementos da lista, 
//        você acaba vendo a representação textual dos objetos do tipo Aula contidos nessa lista.

        // ForEach com lambda
        aulas.forEach(aula -> System.out.println(aula));

    }
}

Saida:

null
[[Aula: Aula01, 21 minutos], [Aula: Aula02, 15 minutos], [Aula: Aula03, 36 minutos]]
[[Aula: Aula01, 21 minutos], [Aula: Aula02, 15 minutos], [Aula: Aula03, 36 minutos]]
[Aula: Aula01, 21 minutos]
[Aula: Aula02, 15 minutos]
[Aula: Aula03, 36 minutos]
1 resposta

Olá,

isso acontece porque o getMessage não encontrou nhm mensagem para exibir.

Experimente lançar essa exceção e informar algo na criação do objeto, exemplo:

public class Program {
    public static void main(String[] args){

        try {            
            throwExc();
        } catch (UnsupportedOperationException e) {
            System.out.printf("%s\n", e.getMessage());
        }

    }

    static void throwExc(){
        throw new UnsupportedOperationException("Teste");
    }
}