Отражение: получить объект вызова в статическом методе - PullRequest
1 голос
/ 12 июля 2011

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

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

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

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

Ответы [ 4 ]

2 голосов
/ 12 июля 2011

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

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

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

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

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

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

1 голос
/ 12 июля 2011

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

0 голосов
/ 12 июля 2011

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

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

0 голосов
/ 12 июля 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...