我有一些代码依赖于反射(与第三方库一起使用)来获取类的字段。这些类中的许多类混合使用相同的字段,一些字段几乎相同,但有一些区别。
这导致了大量的代码重复,但是由于依赖反射,我不确定周围是否有很好的模式。
根据文档:
返回一个Field对象数组,该数组反映由该Class对象表示的类或接口声明的所有字段。这包括公共,受保护的,默认(程序包)访问和私有字段,但不包括继承的字段。
这排除了Abstract类或任何与继承相关的解决方案。
这是一个代码示例(MyField代表第三方库对象,并且myData是的公共成员MyField):
ClassA.java
public class ClassA {
private final Field[] myFields;
private final MyField a = new MyField(1);
private final MyField b = new MyField(2);
private final MyField c = new MyField(3);
public ClassA() {
myFields = this.getClass().getDeclaredFields();
}
public void doStuff(Field[] myFields) {
// As an example, this clears out the field values.
// There are several of these methods that use or manipulate the fields
for (Field f : myFields) {
if (f.getType() == MyField.class
|| f.getType().getSuperclass() == MyField.class) {
try {
f.setAccessible(true);
((MyField) f.get(this)).myData.reset();
}
catch (IllegalArgumentException | IllegalAccessException e) {
continue;
}
}
}
}
public Field[] getFields() {
return Arrays.copyOf(myFields, myFields.length);
{
}
ClassB.java
public class ClassB {
private final Field[] myFields;
private final MyField a = new MyField(1);
private final MyField c = new MyField(3);
private final MyField d = new MyField(4);
public ClassB() {
myFields = this.getClass().getDeclaredFields();
}
public void doStuff(Field[] myFields) {
// Same as above
}
public Field[] getFields() {
return Arrays.copyOf(myFields, myFields.length);
{
}
需要注意的是ClassA和ClassB股票领域a和c与方法getFields()和doStuff()。
有什么办法可以在不影响反射的情况下支撑某些重复工作?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。