Java 如何使用反射访问定义为抽象类型的成员变量的详细信息
我有一个班级,其形式如下:Java 如何使用反射访问定义为抽象类型的成员变量的详细信息,java,reflection,Java,Reflection,我有一个班级,其形式如下: public class SomeClass { public static AbstractClass<Boolean> variable1 = AbstractClass.create("key", value); } 我想在SomeClass上编写一个测试,它访问所有这些变量[1…],并对它们的“键”执行测试。我该怎么做 这是我的试穿: for (Field field : allFields) { Class<?> targe
public class SomeClass {
public static AbstractClass<Boolean> variable1 = AbstractClass.create("key", value);
}
我想在SomeClass
上编写一个测试,它访问所有这些变量[1…],并对它们的“键”执行测试。我该怎么做
这是我的试穿:
for (Field field : allFields) {
Class<?> targetType = field.getType();
AbstractClass<?> flag = (AbstractClass<?>) field.get(targetType.newInstance());
assertTrue(flag.getKey().startsWith("xyz"));
for(字段:所有字段){
类targetType=field.getType();
AbstractClass标志=(AbstractClass)field.get(targetType.newInstance());
assertTrue(flag.getKey().startsWith(“xyz”);
显然,使用newInstance
不能像targetType
那样工作这里是抽象的,并抛出InstantiationException
另一种方法是静态访问所有变量variable1、variable2等,从中检索密钥,并对其执行断言。然而,很明显,这意味着如果有人在inSomeClass
中添加了一个新字段,则必须有人手动修改测试文件并编写断言。这实际上没有帮助,因为e人们可能会忘记编写测试
所以我认为使用反射可能会解决这个问题。但是,我认为使用反射是不可能的,所以想知道是否有任何方法可以解决这个问题?
或者,还有其他方法可以自动化测试,这样测试就可以添加所有字段,开发人员就不必担心了?您迭代的字段是
某个类的,不是吗
如果是这样的话,您必须传递的参数是SomeClass
的intance,或者如果字段是静态的,则是任何内容,在您的示例中就是这样
AbstractClass<?> flag = (AbstractClass<?>) field.get(null);
AbstractClass标志=(AbstractClass)字段.get(null);
请注意,最好将其分为两个步骤来检查字段。get
返回的内容是否是AbstractClass
的一部分。您可以分享AbstractClass
的任何实现细节吗?另外,您可以告诉我如何在for
块中获取所有字段吗?我不清楚您是否试图对AbstractClass的实例或AbstractClass.class本身进行断言。这就是我访问allFields的方式。allFields=SomeClass.class.getFields()基本上,AbstractClass
包含一个键和一个值。我必须检索键并对键进行断言。你的标题没有意义。Java中没有抽象字段。
AbstractClass<?> flag = (AbstractClass<?>) field.get(null);