Re:Saber qual classe esta chamando um método

Você está perguntando se é possível acessar uma classe sem precisar instanciar ela, seria isto?

Caso seja o que você pode fazer é deixa-la como Static (método de acesso).Assim você nao acessa o objeto e sim diretamente a classe, ok?

Exemplos classicos de métodos Static

public void static main.....

math.sqrt();
math.random();

Abraços!

Procure por Throwable.fillStackTrace.

Está cheirando a Proxy. Não tenha muita certeza, mas acho que CGLIB (http://cglib.sourceforge.net/) pode ajudar neste caso.

Depende, uma coisa simples talvez seria isso:


public class ClasseA 
{
    
    public void metodoChamador() 
    {
        ClasseB classB = new ClasseB();
        
        classB.metodoSendoChamado( this );
    } 
}



public class ClasseB 
{
    
    public void metodoSendoChamado( Object owner )
    {
        if ( owner instanceof ClasseA )
        {
             System.out.println( "Fui chamado por ClasseA" );
        }
        
    }
}

Posso ta falando besteira, mas quem sabe usando um InstaceOf para ver qual é a variavel que esta instaciando uma classe, caso seja retorne um boolean, caso contrário true.Vocês aprovam minha ideia ?

Rode a classe "TesteClasseChamandoOutraClasse "

class Classe1 {
    public void teste() {
        System.out.println ("O método teste da classe Classe1 foi chamado pela classe " + 
            Util.classeChamadora() ) ;
    }
}

class Classe2 {
    public void teste() {
        System.out.println ("O método teste da classe Classe2 foi chamado pela classe " + 
            Util.classeChamadora() ) ;
    }
}

class ClasseX {
    public void teste() {
        Classe2 classe2 = new Classe2();
        classe2.teste();
    }
}

class ClasseY {
    public void teste() {
        Classe1 classe1 = new Classe1();
        classe1.teste();
    }
}


class Util {
    public static String classeChamadora () {
        Throwable thr = new Throwable();
        thr.fillInStackTrace ();
        StackTraceElement[] ste = thr.getStackTrace();
        return ste [2].getClassName();
    }
}

class TesteClasseChamandoOutraClasse {
    public static void main(String[] args) {
        (new ClasseX()).teste();
        (new ClasseY()).teste();
    }
}

A saída deve ser:

O método teste da classe Classe2 foi chamado pela classe ClasseX
O método teste da classe Classe1 foi chamado pela classe ClasseY
1 curtida

Use um aspecto entao. Com AspectJ nao seria dificil fazer isso.

Brigado a todos, fico perfeito com isso aqui

public static String classeChamadora () { Throwable thr = new Throwable(); thr.fillInStackTrace (); StackTraceElement[] ste = thr.getStackTrace(); return ste[2].getMethodName(); } public void teste(){ Tools.alerta(classeChamadora()); } public void tentaLogin(){ teste(); }

Chamando a tentaLogin(), a teste vai saber que foi ela que chamou, e da pra adaptar pra outros usos…

Boa tarde!

Gostaria de saber se existe alguma maneira de seu capturar a instancia da classe que esta fazendo a chamada a um método.
Ex.:

Tenho a

[code]
class ClasseA {
void metodoChamador() {
ClasseB b = new ClasseB();
b.metodoSendoChamado();
}
}

class ClasseB {
void metodoSendoChamado() {
//executa algo com a instancia de ClasseA que chamou esse metodo
}
}[/code]

Existe alguma maneira de fazer isso sem que eu tenha que passar uma referencia da classe??

At.

Não é isso não.

Quero saber se tem como eu saber qual foi a classe que chamou um método dentro do método chamado.

At.

[quote=cawink]Depende, uma coisa simples talvez seria isso:

[code]

public class ClasseA
{

public void metodoChamador() 
{
    ClasseB classB = new ClasseB();
    
    classB.metodoSendoChamado( this );
} 

}

public class ClasseB
{

public void metodoSendoChamado( Object owner )
{
    if ( owner instanceof ClasseA )
    {
         System.out.println( "Fui chamado por ClasseA" );
    }
    
}

}

[/code][/quote]

Entao, eu nao quero passar a instancia como parametro.
Queria fazer alguma coisa com relfection ou coisa parecida.

At.