Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何区分对象与静态字段以及对象与非静态字段/变量_Java_Reflection - Fatal编程技术网

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

在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 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;
}