Java 如何区分对象与静态字段以及对象与非静态字段/变量
在Java反射中,了解对象与静态字段和普通字段/变量之间区别的方法是什么?没有静态实例和普通实例这样的东西。只有静态变量和方法等,例如:Java 如何区分对象与静态字段以及对象与非静态字段/变量,java,reflection,Java,Reflection,在Java反射中,了解对象与静态字段和普通字段/变量之间区别的方法是什么?没有静态实例和普通实例这样的东西。只有静态变量和方法等,例如: class A { static A STATIC_A = new A(); A() {} } boolean isComingFromStaticField(Object a) { // returns true if a comes from static field, for example A.STATIC_A // returns
class A {
static A STATIC_A = new A();
A() {}
}
boolean isComingFromStaticField(Object a) {
// returns true if a comes from static field, for example A.STATIC_A
// returns false if a comes from non-static field/variable, for example new A()
// .. or vice versa ...
}
这里baz和bar的值指的是同一个对象——尽管一个变量是静态的,另一个是实例变量
现在,如果您只想检查特定引用是否等于.STATIC_实例,这是一个简单的引用相等性检查:
public class Foo {
static Object bar = new Object();
Object baz = bar;
}
。。。但是请注意,检查的只是引用相等。你应该避免使用误导性的术语,如static instance,在你自己的头脑中明确你的真正意思。在你的示例中,类A的实例只是一个实例,某些类B中的静态变量可能指向它,但类C中的另一个非静态变量也可能指向它。因此,您无法进行此检查,因为它没有意义。谢谢您的更正。顺便说一句,我已将方法参数更改为不使用A。相反,它是一个对象a@HendraJaya:OK-相同的方法正文仍然适用。我做了适当的编辑。
boolean isStaticInstance(Object a) {
return a == A.STATIC_INSTANCE;
}