Saber que está instanciando

7 respostas
J

Caras gostaria de uma ajuda.
Gostaria de saber se tem como saber quem está instanciando a classe.
ex:

class ClasseChamada
{
   public ClasseChamada()
   {
      if (!classeChamadora instanceOf ClasseChamadora)
         throw new Exception("Erro"):
   }
}

class ClasseChamadora
{
    public void chamar()
   {
      // olha pode
      new ClasseChamada();
   }
}

class ClasseQualquer
{
    public void chamar()
   { 
      // nao pode
      new ClasseChamada();
   }
}

Isso é para evitar que a classe seja chamada de qualquer lugar.
Mas esta classe chamada pode estar fora do pacote da classe chamadora.
Senão seria fácil.

Pode ser qualquer extratégia…

7 Respostas

pcalcado

Crie uma factory que recebe uma isntância.

public Resultado criar(Criadora criadora){
 if(criadora isntanceof blablabla) return new Resultado();
 else {throw blabla}
}
J

Legal uma luz está surgindo mas tem uma questão.

Não pode haver possibilidade de trapaça.
ex:

class ClasseQualquer
{
  ClasseChamada c =  ClasseChamada.criarInstancia(new Criadora()); 
}
pcalcado

Falei besteira: esqueça a factory, use no construtor!

E…trapaça? Se você quer segurança, você nõa vai encotnrar muitas possibilidades neste nível.

cv1

Voce pode dar uma olhada tambem no stack trace (dica: leia o javadoc) e ver quem esta te chamando. Mas se vc precisa dessa informacao, eh sinal de que vc esta fazendo alguma coisa errado. Pra que vc quer isso?

J

Na verdade isso pode virar uma frankstein e uma baita gambiarra.
Como vc disse Cv é melhor rever isso pode ser uma besteira um controle desses.

Obrigado.

T

Uma vez fiz isso para ver se uma rotina estava sendo chamada fora do meu pacote, por algum programa “não autorizado”.
Isso envolve algo como (fazendo isso de memória já que não estou achando nas minhas coisas e desativei o Google Desktop Search):

Throwable thr = new Throwable();
thr.fillStackTrace();
StackTraceElement[] ste = thr.getStackTrace();

e verificar algum dos elementos de ste (não lembro qual deles).

J

Era essa minha finalidade ver o programa ou classe autorizada.
Isso é uma gambi mas pode funcionar

Criado 18 de maio de 2005
Ultima resposta 18 de mai. de 2005
Respostas 7
Participantes 4