MVC - Controle generico?

Ola pessoal estou com uma duvida basica, pode parecer um absurdo
para voces, mas estou iniciando na linguagem java.

Eu vi q podemos fazer um Dao Generico e fiz um, agora eu
queria saber se e possivl fazer um controle generico. asim:
no meu controle eu necessito instanciar uma classe Livros por ex

public class ControleLivros {
   private Livros livro = new Livros();
   ...codes
}

gostaria de saber se e possivel e como fazer por ex:

public class Controle<objeto> {
   private <objeto> obj = new <objeto>();
   ...codes
}

ja pude ver q isso deu erro, ehehehe, mas e possivel?

public class Controle&lt;T&gt; {
    private T obj;
    public Controle(Class&lt;T&gt; klass) {
        obj = klass.getInstance();
    }
}

Infelizmente em Generics não se pode fazer “new T”, como você estava tentando fazer. Você é obrigado a passar, no seu caso, Livro.class.

Perfeito, so pra ter certeza, devo criar
esse metodo getInstance assim:

public Livros getInstance() {
   private Livros x = new Livros();
   return x;
}

[quote=jeanmarcel]Perfeito, so pra ter certeza, devo criar
esse metodo getInstance assim:

public Livros getInstance() { private Livros x = new Livros(); return x; } [/quote]

Não cara. Uma vez você passando como argumento a sua Classe.class, o seu parâmetro Class klass é que tem o método getInstance().

nao entendi o q voce quis dizer, o que
eu tentei deu erro…consegui da seguinte forma

[code]package meupacote.controle;

public class Controle {

private Object obj;


public Controle(Class<objeto> obj) {
	this.obj = obj;
}

}[/code]

esta correto?

outra duvida, qual a dif. de fazer assim:

[code]package meupacote.controle;

public class Controle {

private Object obj;


public Controle(objeto obj) {
	this.obj = obj;
}

}[/code]

Obrigado

Qual o tipo do seu atributo? Object
o que adianta passar algo usando a tecnologia Generics se depois ele vai virar um Object?

Veja o que o Thingol escreveu.

o que muda é, que ao invés de criar uma nova instancia usando new, você busca esta instancia usando o método getInstance() que está presente na Classe: Class que é o seu argumento. Qual parâmetro passar para o método? SuaClasse.class

é estranho, mas é isso ai mesmo…

até

sim eu havia tebntado dakela forma mas veja
o seguinte codigo gera erro:

[code]package meupacote.controle;

public class Controle {

private objeto obj;

public Controle(Class<objeto> obj) {
	this.obj = obj.getInstance();
}

}[/code]

o eclipse diz: o metodo getInstance nao foi
definido para o tipo Class.

por isso tentei aquela forma alternativa ehehehe.

Pq vc não está usando T?

public class Controle<T> { private T obj; public Controle(Class<T> klass) { try { obj = klass.getInstance(); } catch (Exception e) { System.out.println("Nao consigo instanciar a classe!",e); } } }

Testa assim…

ja sai esse erro

[code]Exception in thread “main” java.lang.Error: Unresolved compilation problem:
The method getInstance() is undefined for the type Class

at meupacote.controle.Controle.<init>(Controle.java:8)
at meupacote.controle.Teste.main(Teste.java:10)[/code]

Ele fica com um x vermelho no eclipse nessa linha,
existe o metodo getClass(), newInstance(), sera q n e isso…

ainda vou precisar de um metodo q crie uma nova instancia
desse meu objeto, existe alguma outra maneira?

pelo que andei analisando tbm nao vai ser muito util
um controle generico, ja que cada classe tera
suas proprias acoes.

É porque quando vc faz uma classe genérica, vc tem que passar qual atributo ela vai usar em tempo de execução, tendo em vista que T não existe no Java…

Exemplo…

[code]public class MeuGenerico {

private T objGenerico;

public MeuGenerico(Class klass){
this.objGenerico = klass.newInstance();
}

public static void main(String args[]){
MeuGenerico objString = new MeuGenerico();
}[/code]}

mas eu usei em otra classe veja:

[code]package meupacote.controle;

import meupacote.Usuarios;

public class Teste {

public Teste(){}

public static void main(String[] args){
	Controle<Usuarios> usu = new Controle(Usuarios.class);
}

}[/code]

testando com seu codigo ele da erro entao mudei um pouco

[code]package meupacote.controle;

public class Teste {

   private T objGenerico;  
     
   public Teste(Class<T> klass){  
   this.objGenerico = klass.newInstance();  
   }  
     
   public static void main(String args[]){  
   Teste<String> objString = new  Teste(String.class);  
   }  

}[/code]

mas o erro persiste no newInstante…

[code]package meupacote.controle;

public class Teste {

   private T objGenerico;  
     
   public Teste(Class<T> klass){  
   this.objGenerico = klass.newInstance();  
   }  
     
   public static void main(String args[]){  
       //colokei um parametro
   Teste<String> objString = new  Teste<string>(String.class);  
   }  

}[/code]

Qual o erro?!?
Não seria um try e catch delimitando o newInstance()?!?
Ele levanta uma checkedException que não me lembro agora…

E resolveu, ehehehe.
Entao isso vai criar uma nova isntancia do meu objeto?
tal como Livros livro = new Livros();

obrigado!!!