Não conhecia essa anotação, fui testar mas dá o erro: “cannot find symbol
symbol : class PostConstruct
location: class PaiSub”
Update (Adicionando): [size=18]<[/size]Antes de eu testar, pesquisei essa annotation, e encontrei na documentação da API d java, no pacote javax.annotations http://download.oracle.com/javaee/5/api/javax/annotation/package-summary.html mas aqui não está encontrando nem mesmo o pacote… precisa de algum framework?? na documentação faz muita referência ao EJB[size=18]>[/size]
É porque trabalha com injenção e há casos particulares para se aplicar esse annotation.
O retorno do método deve ser void e não pode ter parametros, com exceção do EJB.
Ele cita o EJB pois também utiliza de annotation para a injeção da classe.
E não acha o pacote? Tens J2EE na sua máquina?
tentei utilizar sua idéia porem, como o drigo.angelo disse, não funcionou e deu o mesmo erro
Veja abaixo o código:
public class Malha extends Group <SDEE,SDEE,Regiao>{
public Malha(SDEE root, String idExterno) {
super(root, idExterno);
}
@PostConstruct
public void add(){
root.malha.addGroup(this);
}
}
Caro rodrigousp,
Poderia me explicar do que se trata este Factory Method?
Descobri que para encontrar o símbolo voce deve importar “import javax.annotation.PostConstruct;”
para de dar erro porem não faz efeito algum
import javax.annotation.PostConstruct;
public class Malha extends Group <SDEE,SDEE,Regiao>{
public Malha(SDEE root, String idExterno) {
super(root, idExterno);
}
@PostConstruct
public void add(){
System.out.print("haaaaaaaaaa");
root.malha.addGroup(this);
}
}
[code]public class Malha extends Group <SDEE,SDEE,Regiao>{
private Malha(SDEE root, String idExterno) { //Repare que é private !
super(root, idExterno);
}
public void add(){
root.malha.addGroup(this);
}
public static Malha createInstance(SDEE root, String idExterno){
Malha m = new Malha(SDEE root, String idExterno);
root.malha.addGroup(m);
return m;
}
} [/code]
Assim, qualquer um que quiser uma instância de Malha tem que chamar o createInstance que chama o método que você quer… agora isso só não é 100% seguro para o caso que sua classe Malha seja extendida…
Me deram a idéia de usar Thread pra resolver este problema. A ideia que uma thread separada verificaria se o objeto já está construido más não ta funcionando
public class HashID <Type extends Identification> {
private final int next;
private final Hashtable <Integer,Type> id;
private final Hashtable <String,Type> idExterno;
public HashID(){
id = new Hashtable<Integer,Type>();
idExterno = new Hashtable<String,Type>();
next = 1;
}
public void addGroup(Type group){
id.put(new Integer(next), group);
idExterno.put(group.getIdExterno(), group);
group.setId(next);
next++;
}
public void removeIdentifier(Type identificable){
this.id.remove(new Integer(identificable.getId()));
this.idExterno.remove(identificable.getIdExterno());
}
public Type getIdentificable(String idExterno){
return this.idExterno.get(idExterno);
}
public Type getIdentificable(int id){
return this.id.get(new Integer(id));
}
}
public class Malha extends Group <SDEE,SDEE,Regiao>{
public Malha(SDEE root, String idExterno) {
super(root, idExterno);
root.malha.addGroup(this);
}
}
A excessão é nullPointerexception e o erro ocorre ná hora de tentar adicionar o objeto na hash table
um primitivo final, nao inicializado nem sabia que dava pra fazer isso
se o problema tá na hora de inserir no hashtable
tem que ver se tu realmente deu new nessa classe malha, deve ter dado pois senao nem entraria no metodo
ou entao aquele metodo getIdExterno tá alguma coisa errada
era mais facil ver qual linha dava o erro de null pointer
Descobri que para encontrar o símbolo voce deve importar “import javax.annotation.PostConstruct;”
para de dar erro porem não faz efeito algum
[code]
import javax.annotation.PostConstruct;
public class Malha extends Group <SDEE,SDEE,Regiao>{
public Malha(SDEE root, String idExterno) {
super(root, idExterno);
}
@PostConstruct
public void add(){
System.out.print("haaaaaaaaaa");
root.malha.addGroup(this);
}
}
[/code][/quote]
O provavél motivo é que não está ocorrendo injeção em sua classe.
Já tive a necessidade de utilizar o annotation @PostConstruct e não obtive problemas.
Creio que deva estar em um contexto diferente do qual está sua classe, como um container.
Leia com atenção pois já postaram soluções interessantes pra você.