Como deixar de dá o Return?

Galera, tenho um método que retorna um List, dentro do try claro ele vai retornar certo, no catch é obrigatório também a retornar algo, queria saber se tem como deixar de retornar ou se tiver que retornar como vou retornar um List vazio

acussa o erro na assinatura por causa disso

[code]public List retornaLista(String nome)
{
factory = Persistence.createEntityManagerFactory("exfuncionarios");
manager = factory.createEntityManager();

		EntityTransaction tx = manager.getTransaction();
		tx.begin();
		try 
		{
			Query query = manager.createQuery("SELECT c FROM Cadastro c WHERE c.nome LIKE :nome%");
			query.setParameter("nome", nome);
			List<Cadastro> lista = (List<Cadastro>) query.getResultList();
			
			
			tx.commit();
							
			return lista;
		} 
		catch (RuntimeException e)
		{ 
			tx.rollback();
			JOptionPane.showMessageDialog(null,
                   "O Programa encontrou um erro!\nContacte o mantenedor do programa",
                   "Erro!",JOptionPane.ERROR_MESSAGE);
		
		}
		finally
		{
			manager.close();
			factory.close();
		}
	}[/code]

Você nao pode deixar de retornar…

O melhor que você faz é declarar seu List fora do try, aí voce cria um e atribui valores a ele dentro do try, e retorna ele fora do try…

Se você precisar, você atribui um valor nulo pra ele no seu catch…

Desta forma, se der um erro no seu try, ele retornará null…

E aí Vítor. Uma boa prática de programação, é você ter SOMENTE um return nos seus métodos. Assim:

public List minhaLista(){
List lst = null;
try{
   if(true){
      lst = listaUm;
   }else{
      lst = listaDois;
    }
}catch(Exception e){
     lst = listaTres;
}

return lst;

E se vc quiser retornar uma lista vazia:

List lst = new ArrayList();

Abraço.

Não é verdade que o catch sempre tem que retornar algo. Se ele lançar uma exceção não tem que fazer return. Aquele código swing para dar uma mensagem ao usuário é que não deveria estar ali, e dai o problema. Ali deveria estar um throw e;
Também é discutivel só apanhar RuntimeException mas isso pode ser uma logica do seu programa por isso não digo nada.

NUNCA retorne null quando uma coleção é esperada. Retorne Collections.EMPTY_SET , Collections.EMPTY_LIST ou Collections.EMPTY_MAP conforme o caso. NUNCA crie um objeto de colecção vazia só para o poder retornar (algo como return new ArrayList()). Use SEMPRE as coleções vazias pre definidas pq são mais eficientes.

O controle de erro que mostra mensagem ao usuário deve ficar no método que chama este. E este deve lançar uma exceção se algo correu mal.

Só tem um problema com EmptyList, EmptySet e afins… elas não são coleções efetivas, elas não funcionam de verdade, então, caso quem recebe o retorno do metodo tente usar a coleção ela não vai funcionar…

ex.:

[code]public List meuMetodo(){
return Collections.EMPTY_LIST;
}

public void outroMetodo(){
List lista = meuMetodo();
if(lista.isEmpty()){
lista.add("meu objeto"); //Bang
}
}[/code]

Então Jairelton para finalizar, qual seria a solução ideal??? criar um List antes do try e retornar vazio no catch???

e se vc criar uma exception para lista vazia? e mandar junto a msg q sera apresentada na tela, tipo: “Nenhum cadastro encontrado”

acho uma solução tranquila limpa…melhor do q lista vazia…

Só tem um problema com EmptyList, EmptySet e afins… elas não são coleções efetivas, elas não funcionam de verdade, então, caso quem recebe o retorno do metodo tente usar a coleção ela não vai funcionar…
[/quote]

Mas fazer isso não é boa prática. Não faz sentido pedir a um método que retorne uma lista e depois adicionar mais elementos a ela! Pode até ser esse o contrato do método, mas ter métodos que fazem isso não é boa prática. (Não ha separação de responsabilidade nem encapsulamento)

Mas, se for realmente necessário, vc pode usar new ArrayList(outracoleção) ou list.addAll(outracoleção) que é muito mais simples e eficiente.