1

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

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

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

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

2 回答 2

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;
于 2012-10-29T08:16:46.563 回答
0

您可以使用反射访问类的成员:

Field f = anyClass.getDeclaredField("x");
int xValue = f.getInt(null);

通过null作为实例参数传递给getInt().

我们使用getDeclaredField是因为您想访问非公共字段。这样做的缺点是,InvalidFieldException如果该字段不存在到您正在查看的类中,即使它在超类中定义的,它也会抛出一个。但是,当然,如果它被定义在一个超类中,它将具有公共或受保护的访问权限,并且getField可以正常工作。

于 2012-10-29T08:17:38.110 回答