Singleton usando Generics

2 respostas
eliangela

Olá pessoal!

Gostaria de saber como que eu posso fazer uma classe usando Singleton e Generics.
Fiz assim e não funcionou direito:

public class Classe<E extends Storable> {

	private static Classe<? extends Storable> classe;

	public static <E extends Storeable> Classe<? extends Storeable> openConnection(Class<? extends Storeable> clazz)
			throws ConnectionException {
		if (classe == null) {
			classe = new Classe<E>(clazz);
		}
		return classe;
	}
}

Queria saber se é possível trabalhar com genéricos em métodos estáticos e a melhor forma.

Obrigada!

2 Respostas

paulo1911

Olá elisangela tente isso veja:

public class Classe<E extends Storable> {  
      
        private static Classe<? extends Storable> classe;  
      
        public static <E extends Storeable> Classe<? extends Storeable> openConnection(Class<? extends Storeable> classe) throws ConnectionException {  
            if (classe == null) {  
                classe = new Classe<E>(clazz);  
            }  
            return classe;  
        }  
    }

Fallow

WellingtonRamos
paulo1911:
Olá elisangela tente isso veja:
public class Classe<E extends Storable> {  
      
        private static Classe<? extends Storable> classe;  
      
        public static <E extends Storeable> Classe<? extends Storeable> openConnection(Class<? extends Storeable> classe) throws ConnectionException {  
            if (classe == null) {  
                classe = new Classe<E>(clazz);  
            }  
            return classe;  
        }  
    }
Fallow
Desculpe, mas não entendi tua alteração. Você renomeou o parâmetro clazz para classe. A única coisa que isso faz é pular o teste e retornar o próprio parâmetro passado. Com um detalhe importante, você está passando como parâmetro um objeto do tipo Class e está retornando um objeto do tipo Classe que creio dar erro de cast. Fiz um teste rápido aqui, adaptando o código faltante ;) O que notei: Em alguns pontos você estava usando Storeable e em outros, Storable.
public class Classe<E extends Storeable> {   
  
    private static Classe<? extends Storeable> classe;
	private Class<? extends Storeable> clazz;   
  
    public Classe(Class<? extends Storeable> clazz) {
    	this.clazz = clazz;
	}
    
    @Override
    public String toString() {
    	Storeable instance = null;
		try {
			instance = this.clazz.newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
    	return instance.toString();
    }

	public static <E extends Storeable> Classe<? extends Storeable> openConnection(Class<? extends Storeable> clazz)   
            throws ConnectionException {   
        if (classe == null) {   
            classe = new Classe<E>(clazz);   
        }   
        return classe;   
    }   
	
	public static void main(String[] args) {
		System.out.println("TESTE");
		try {
			Classe<? extends Storeable> result =  openConnection(Teste.class);
			System.out.println(result);
		} catch (ConnectionException e) {
			e.printStackTrace();
		}
	}
}  

class Storeable {}
class ConnectionException extends Exception {}

class Teste extends Storeable {
	@Override
	public String toString() {
		return "Hello world";
	}
}
Criado 27 de junho de 2011
Ultima resposta 28 de jun. de 2011
Respostas 2
Participantes 3