Identificar quem instanciou o objeto

5 respostas
V

Galera, tenho várias classes que instânciam um objeto de uma classe
exemplo abaixo, várias classes diferente instânciam esse objeto:

Software software = new Software();

Tenho uma classe de controle, ela recebe esse objeto dessas classes, como posso identificar qual classe que instanciou o objeto???

5 Respostas

C

É algo como:

List a = new ArrayList();
List b = new Vector();
			
 if (a instanceof ArrayList) {
    System.out.println("arraylist");
 }	
			
 if (b instanceof Vector) {
    System.out.println("vector");
 }
V

Não, isso identifica de que classe é o objeto, não quem instanciou o objeto

F

Eu tentaria fazer desse jeito:

Faria nas minhas classes, um método que receberia o objeto software, e compararia com o objeto da classe(com o sinal ==). Retornaria true, se for igual, o que quer dizer q o endereço de memória desses dois objetos é o mesmo. Se cada classe instancia um objeto do tipo software, nenhuma delas vai ter endereços iguais, apesar de o objeto ser o mesmo. Se tu tiver um objeto, com o mesmo endereço de memória dos objetos da classe, certamente foi essa classe que instanciou esse objeto. Eu acho que funcionaria…

C

Você pode utilizar Reflection:

List a = new ArrayList();
	
 Constructor constructor = a.getClass().getConstructor(new Class[] {});
			
 System.out.println("Instância de: "constructor.getName());
J

Você está querendo dizer é isso?

public class Software(){
}

public class Controle{
   public static void receber(Software soft){
       //soft veio de Instanciador1 ou Instanciador2???
   }
}

public class Intanciador1{
   public Intanciador1(){
      Controle.receber(new Software());
   }
}

public class Intanciador2{
   public Intanciador2(){
      Controle.receber(new Software());
   }
}

Se for, não é possível, você terá que enviar a instância da classe que chamou o método como parâmetro também.

Ex.:

public class Controle{
   public static void receber(Software soft, Object chamador){

   }
}
Criado 24 de janeiro de 2007
Ultima resposta 24 de jan. de 2007
Respostas 5
Participantes 4