android - 将类作为参数传递给访问静态变量

时间:2012-10-29 08:08:43

标签: android class static-methods

我需要传递一个类,以便我可以访问它的静态变量。 例如:

Class FirstClass
{
static int x = 1;
}
Class SecondClass
{
static int x = 2;
}

我在另一个类中有一个方法(将由FirstClass和SecondClass使用),但它需要访问静态变量,这里是带有逻辑的伪代码:

public static void process(Class anyClass){
    anyClass.x;
}

2 个答案:

答案 0 :(得分:0)

如果您需要确定在运行时访问哪个类,并且您有多个具有类似命名变量的类,则可以使用Class.forName()返回类的实例,并将类名称作为字符串。

http://developer.android.com/reference/java/lang/Class.html#forName(java.lang.String, boolean, java.lang.ClassLoader)

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也可以正常工作。