我需要传递一个类,以便我可以访问它的静态变量。例子:
Class FirstClass
{
static int x = 1;
}
Class SecondClass
{
static int x = 2;
}
我在另一个类中有一个方法(FirstClass 和 SecondClass 都将使用该方法),但它需要访问静态变量,这是带有逻辑的伪代码:
public static void process(Class anyClass){
anyClass.x;
}
我需要传递一个类,以便我可以访问它的静态变量。例子:
Class FirstClass
{
static int x = 1;
}
Class SecondClass
{
static int x = 2;
}
我在另一个类中有一个方法(FirstClass 和 SecondClass 都将使用该方法),但它需要访问静态变量,这是带有逻辑的伪代码:
public static void process(Class anyClass){
anyClass.x;
}
如果您需要确定在运行时访问哪个类,并且您有多个具有相似命名变量的类,则可以使用 Class.forName() 以字符串形式返回给定类名的类的实例。
public static void process(String className){
classInstance = Class.forName(className);
}
您还需要知道类类型(以便您可以正确声明或强制转换 classInstance)。最简单的方法是让我们所有的“anyClass”类型都继承自一个公共超类。
class AnyClassType1 extends AnyClass
class AnyClassType2 extends AnyClass
然后强制转换或声明 classInstance:
AnyClass classInstance;
您可以使用反射访问类的成员:
Field f = anyClass.getDeclaredField("x");
int xValue = f.getInt(null);
通过null
作为实例参数传递给getInt()
.
我们使用getDeclaredField
是因为您想访问非公共字段。这样做的缺点是,InvalidFieldException
如果该字段不存在到您正在查看的类中,即使它是在超类中定义的,它也会抛出一个。但是,当然,如果它被定义在一个超类中,它将具有公共或受保护的访问权限,并且getField
可以正常工作。