Singleton usando Generics

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!

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

[quote=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[/quote]
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 :wink:
O que notei: Em alguns pontos você estava usando Storeable e em outros, Storable.

[code]public class Classe<E extends Storeable> {

private static Classe&lt;? extends Storeable&gt; classe;
private Class&lt;? extends Storeable&gt; clazz;   

public Classe(Class&lt;? extends Storeable&gt; 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 &lt;E extends Storeable&gt; Classe&lt;? extends Storeable&gt; openConnection(Class&lt;? extends Storeable&gt; clazz)   
        throws ConnectionException {   
    if (classe == null) {   
        classe = new Classe&lt;E&gt;(clazz);   
    }   
    return classe;   
}   

public static void main(String[] args) {
	System.out.println(&quot;TESTE&quot;);
	try {
		Classe&lt;? extends Storeable&gt; 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";
}
}[/code]