反射:在静态方法中获取调用对象

发布于 2024-11-19 16:31:16 字数 193 浏览 6 评论 0原文

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

我有这样的代码:

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

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

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();

Can I get instance a in method foo() ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

怂人 2024-11-26 16:31:16

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

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

推荐方法:

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

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

不,你不能。 因为声明了 foo()作为静态。因此,您不能在该方法内使用 this,因为 this 包含对调用该方法的对象的引用。

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.

染墨丶若流云 2024-11-26 16:31:16

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

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.

最好是你 2024-11-26 16:31:16

不是不可能的...静态方法没有引用,您必须将其重新实现为:

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

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

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

吃兔兔 2024-11-26 16:31:16

不;这就是static 的含义。
编译器实际上完全忽略了该实例。

使用实例方法。

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

Use an instance method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文