Отражение: получить объект вызова в статическом методе

Можно ли в этом методе получить объект, вызывающий статический метод?

У меня есть этот код:

class A{
    static void foo(){
    }
}
A a = new A();
a.foo();

Могу ли я получить экземпляр a в методе foo()?


person Andrei Botalov    schedule 12.07.2011    source источник
comment
Где конструктор A()?   -  person Eng.Fouad    schedule 12.07.2011
comment
Если вы не определяете конструктор, A() используется по умолчанию...   -  person rascio    schedule 12.07.2011


Ответы (4)


Во-первых, ваш код не годится для программиста.

Это связано с тем, что статические методы являются методами уровня класса и должны вызываться без какого-либо экземпляра класса.

Рекомендуемый подход:

class A{
    static void foo(){
    }
}
A.foo();

Могу ли я получить экземпляр a в методе foo()?

Нет, ты не можешь. Потому что foo() объявлен как статический. Таким образом, вы не можете использовать this внутри этого метода, так как он содержит ссылку на объект, вызвавший метод.

person Saurabh Gokhale    schedule 12.07.2011

По определению, для метода static нет объекта-экземпляра (статические методы не работают с конкретным объектом, они определены внутри класса исключительно для пространства имен), поэтому нет.

person Tony the Pony    schedule 12.07.2011

Нет, это невозможно... у статического метода нет ссылки, вы должны передать его, повторно реализуя метод как:

class A{
    static void foo(A theObject){
    }
}
A a = new A();
A.foo(a);

и лучше не вызывать статический метод из экземпляра объекта

person rascio    schedule 12.07.2011

Нет; вот что означает static.
Фактически компилятор полностью игнорирует экземпляр.

Используйте метод экземпляра.

person SLaks    schedule 12.07.2011