【问题标题】:Reflection: get invocation object in static method反射:在静态方法中获取调用对象
【发布时间】:2011-07-12 15:49:02
【问题描述】:

是否可以在该方法中获取调用静态方法的对象?

我有这个代码:

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

我可以在方法foo() 中获取实例a 吗?

【问题讨论】:

  • 构造函数A()在哪里?
  • 如果你没有定义一个构造函数,那么 A() 是默认使用的......

标签: java reflection static static-methods


【解决方案1】:

首先,你的代码不适合程序员。

这是因为静态方法是类级别的方法,应该在没有任何类实例的情况下调用。

推荐方法:

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

我可以在方法 foo() 中获取实例 a 吗?

不,你不能。 Because foo() is declared as static。因此,您不能在该方法中使用 this,因为 this 包含对调用该方法的对象的引用。

【讨论】:

    【解决方案2】:

    根据定义,static 方法没有实例对象(静态方法不对特定对象进行操作,它们在类中定义纯粹是为了命名空间)——所以没有

    【讨论】:

      【解决方案3】:

      没有是不可能的...静态方法没有引用,你必须通过它重新实现方法:

      A类{ 静态 void foo(A theObject){ } } A a = 新 A(); A.foo(a);

      最好不要从对象的实例中调用静态方法

      【讨论】:

        【解决方案4】:

        没有;这就是static 的意思。
        编译器实际上完全忽略了该实例。

        使用实例方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多