Tenho a seguinte classe abstrata com um método valueOf(String value) que deve instanciar e me devolver um objeto do tipo T (generico), que por sua vez é um subtipo (RG, CPF, etc) de T
[code]public abstract class DocumentoValidado implements Serializable {
//…
private String value;
protected DocumentoValidado(String value) throws DocumentoInvalidoException {
//...
}
public <T extends DocumentoValidado> T valueOf(String value) {
}
//...
}[/code]
como fazer esta instancia no método valueOf? Lembrando que o construtor da classe passada em T recebe um parametro String value.
Desde já, agradeço.
Bom pelo o seu codigo em nenhum momento vs informa a classe T
vs pode fazer da seguinte forma
public <T ex Document> T valueOf(Class<T> clazz, String value){
try{
clazz.getConstructor(String.class).newInstance(value);
}....
}
[quote=mauriciot.silva]Bom pelo o seu codigo em nenhum momento vs informa a classe T
vs pode fazer da seguinte forma
public <T ex Document> T valueOf(Class<T> clazz, String value){
try{
clazz.getConstructor(String.class).newInstance(value);
}....
}
[/quote]
O que vem a ser vs???
o q isso ira acrescentar no forum?
[quote=drsmachado][quote=mauriciot.silva]Bom pelo o seu codigo em nenhum momento vs informa a classe T
vs pode fazer da seguinte forma
public <T ex Document> T valueOf(Class<T> clazz, String value){
try{
clazz.getConstructor(String.class).newInstance(value);
}....
}
[/quote]
O que vem a ser vs???[/quote]
“vs” deve ser Vossa Senhoria, rsrs.
Brincadeiras a parte, a dica do mauriciot.silva foi boa.
Problema resolvido.
ou entao vs poder mudar a declaracao da classe
public abstract class DocumentoValidado<T ex DocumentoValidado> implements Serializable
public final T valueOf(String value){
// logica para pegar tipo Generico....
try{
// clazz seria o tipo generico...
clazz.getConstructor(String.class).newInstance(value);
}....
}
nao ha problema o method ser final, pois Documento eh Abstract… e jah terah uma logica implementada para as outras sub classes