Reflection: get invocation object in static method

后端 未结 4 372
轮回少年
轮回少年 2021-01-23 09:38

Is it possible to get an object that invoked static method in this method?

I have this code:

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


        
相关标签:
4条回答
  • 2021-01-23 10:18

    Firstly, your code isn't good as a programmer.

    It is because static methods are class-level methods and should be called without any instance of class.

    Recommended approach :

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

    Can I get instance a in method foo() ?

    Nope, you can't. Because foo() is declared as static. So you can't use this inside that method, since this contains a reference to the object that invoked the method.

    0 讨论(0)
  • 2021-01-23 10:23

    No is impossible...the static method don't have the reference, you have to pass it reimplementing the method as:

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

    and is better don't call the static method from the instance of the object

    0 讨论(0)
  • 2021-01-23 10:29

    No; that's what static means.
    The compiler actually completely ignores the instance.

    Use an instance method.

    0 讨论(0)
  • 2021-01-23 10:30

    By definition, there is no instance object for a static method (static methods do not operate on a specific object, they are defined within a class purely for namespacing) -- so no.

    0 讨论(0)
提交回复
热议问题