[RESOLVIDO] public ? insert(? object);

13 respostas
P

boa tarde,

estou fazendo uma interface chamada dataset, e gostaria q todas as minhas classes DAO implementassem essa interface…
os metodos sao algo como

insert
update
delete
getList
getItem

o problema é que: por exemplo, o insert fica:

public Object insert(Object objeto)

isso mas gostaria que ao invez de explicitar Objeto eu deixasse um curinga ai para ficar mais ou menos assim:

public ? extends Object insert(? extends Object objeto)

ou simplesmente

public ? insert(? object);

e então nas classes concretas eu especificaria a classe

public Pessoa insert(Pessoa objeto);

será que tem como?

obrigado

13 Respostas

drsmachado

Está utilizando algum framework ORM ou jdbc puro?

P

estou utilizando puro… e gostaria que fosse assim pra pegar as manhas… hehe

drsmachado

Se fosse com framework seria bem simples.
Com jdbc puro, sugiro criar uma interface para cada DAO isolado. Afinal, o tipo de argumento de métodos como insert, delete e update seria mais específico, não te obrigando a fazer conversões ou utilizar reflection

pmlm
public <T> T insert(T object)
E

usa Reflexion: http://java.sun.com/developer/technicalArticles/ALT/Reflection/

drsmachado

Se vai usar reflection, já pesquisa e usa hibernate então…

P

hum, interessante esse reflection… vou tentar com ele e posto o resultado aqui…

esse não deu certo… eu ja tinha tentado…

outra coisa q tentei foi criar uma interface tb para as minhas classes…

class Pessoa implements IPersistable class Produto implements IPersistable

e os meus DAOs ficariam

public IPersistable insert(IPersistable objeto);

acho que a modelagem ficaria boa, digo sem gambiarras…
mas tb nao adiantou muito, pq d qq jeito tenho q dar cast pra todo lado…

agora me digam: esse reflection num é considerado gambiarra nao? hehe

valeu

drsmachado

Reflection não é gambiarra, é uma solução de alto nível. Agora, seria o mesmo que caçar coelho com rifle para elefante…

L
pmlm:
public <T> T insert(T object)

Vc deve ter feito algo errado, pois dessa forma deveria funcionar. De uma olhada nesse código.

public class GUJ1 {

	public static class Test {

		public <T> T insert(T t) {
			System.out.println("Inserting: " + t);
			return t;
		}

	}

	public static void main(String[] args) {
		Test t = new Test();
		Integer i = t.insert(Integer.valueOf(1));
		String s = t.insert("Test");
		Object o = t.insert(null);
		List<Map<String, String>> list = t.insert(new ArrayList<Map<String, String>>());

		System.out.println("... " + i);
		System.out.println("... " + s);
		System.out.println("... " + o);
		System.out.println("... " + list);
	}
}
P
lsjunior:
pmlm:
public <T> T insert(T object)

Vc deve ter feito algo errado, pois dessa forma deveria funcionar. De uma olhada nesse código.

public class GUJ1 {

	public static class Test {

		public <T> T insert(T t) {
			System.out.println("Inserting: " + t);
			return t;
		}

	}

	public static void main(String[] args) {
		Test t = new Test();
		Integer i = t.insert(Integer.valueOf(1));
		String s = t.insert("Test");
		Object o = t.insert(null);
		List<Map<String, String>> list = t.insert(new ArrayList<Map<String, String>>());

		System.out.println("... " + i);
		System.out.println("... " + s);
		System.out.println("... " + o);
		System.out.println("... " + list);
	}
}

hum, talvez tenha feito errado mesmo... se funcionar assim vai ficar muito bom...
quando chegar em casa vou testar,
valeu pessoal

P

Cara, o

funcionou 100%, ficou do jeitinho que eu queria, mas poderia me explicar oq é esse T? eu vi que posso substituir por qq coisa, mas oq ele representa?

obrigado…

o reflection eu nem cheguei a testar já que essa solução me atendeu bem

A

Esse recurso é chamado de Generics. Mais informações aqui

Você pode pensar no T como uma variável que contém um tipo.

Na hora de usar a função, você diz qual tipo exatamente usará.

Importante notar, que o T é só uma convenção, poderia usar outras letras.

No seu caso, seu método insert aceita qualquer tipo, mas ele sempre retornará uma variável do mesmo tipo passado como parâmetro.

P

hum, massa…

valeu pessoal

Criado 15 de dezembro de 2011
Ultima resposta 16 de dez. de 2011
Respostas 13
Participantes 6