我需要传递一个类,以便我可以访问它的静态变量。 例如:
Class FirstClass
{
static int x = 1;
}
Class SecondClass
{
static int x = 2;
}
我在另一个类中有一个方法(将由FirstClass和SecondClass使用),但它需要访问静态变量,这里是带有逻辑的伪代码:
public static void process(Class anyClass){
anyClass.x;
}
答案 0 :(得分:0)
如果您需要确定在运行时访问哪个类,并且您有多个具有类似命名变量的类,则可以使用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;
答案 1 :(得分:0)
您可以使用反射访问类的成员:
Field f = anyClass.getDeclaredField("x");
int xValue = f.getInt(null);
通过将null
作为实例参数传递给getInt()
,可以通过反射访问静态字段。
我们正在使用getDeclaredField
,因为您想访问非公开字段。这样做的缺点是,如果该字段对于您正在查看的类不存在,它将抛出InvalidFieldException
,即使它在超类中定义了 。但是,当然,如果它是在超类中定义的,它将具有公共或受保护的访问权限,并且getField
也可以正常工作。