Objeto Class vs Generics

Aee galera…

Estou tentando implementar uma X classe funcionando como factory, criando objetos de uma classe Y, sendo Y uma classe genérica (precisa ser generica por causa do tipo de retorno dos métodos dessa classe).

A classe X deve ter um método createY(Class c) onde eu crio uma instancia da classe Y usando ‘c’ como tipo genérico. Só que não estou conseguindo usar o tipo ‘c’ como parâmetro de tipo genérico. Alguem sabe como? Valew!

Além disso, a classe X funciona como um repositório de Y, e tem o método getY(Class c)onde eu retorno o Y correspondente a classe c

Acho que o método fica assim:

static <T> T createY(Class<T extends Y> clazz) { return clazz.newInstance(); }

Isso garante que o tipo T usado na assinatura do método será usado como tipo do valor de retorno.

Era isso?

[quote=rissato]Aee galera…

Estou tentando implementar uma X classe funcionando como factory, criando objetos de uma classe Y, sendo Y uma classe genérica (precisa ser generica por causa do tipo de retorno dos métodos dessa classe).

A classe X deve ter um método createY(Class c) onde eu crio uma instancia da classe Y usando ‘c’ como tipo genérico. Só que não estou conseguindo usar o tipo ‘c’ como parâmetro de tipo genérico. Alguem sabe como? Valew!

Além disso, a classe X funciona como um repositório de Y, e tem o método getY(Class c)onde eu retorno o Y correspondente a classe c[/quote]

será que é isto … ?


public <Y> Y getY(Class<Y> c){

          return c.newInstance();
}

Pois é, o enunciado ficou meio confuso.
Agora relendo me parece ser mais o que o Sergio falou…

vou colocar um exemplo pra ajudar:

class Tabela {

}

class TabelaManager() {
static void criaTabela(Class c) {
???
}

}

Entenderam agora? Eu preciso instanciar uma classe genérica, utilizando como tipo genérico a classe ‘c’ passada como parâmetro.

class Tabela&lt;T&gt; {
    private Class&lt;T&gt; klass;
    public Tabela(Class&lt;T&gt; klass) {
        this.klass = klass;
    }
}
class TabelaManager {
    public static &lt;T&gt; Tabela&lt;T&gt; criaTabela (Class&lt;T&gt; klass) {
        return new Tabela&lt;T&gt;(klass);
    }
}
class Teste {
    Tabela&lt;Long&gt; tabela = TabelaManager.criaTabela (Long.class);
}