开发者社区> 问答> 正文

设计模式与反射兼容

我有一些代码依赖于反射(与第三方库一起使用)来获取类的字段。这些类中的许多类混合使用相同的字段,一些字段几乎相同,但有一些区别。

这导致了大量的代码重复,但是由于依赖反射,我不确定周围是否有很好的模式。

根据文档:

返回一个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()。

有什么办法可以在不影响反射的情况下支撑某些重复工作?

展开
收起
垚tutu 2019-12-12 09:50:21 853 0
1 条回答
写回答
取消 提交回答
  • 问题解决了吗?

    2020-02-05 17:20:23
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
JAVA反射原理以及一些常见的应用 立即下载
当泛型遇上协议 立即下载
Java基础入门(四)-泛型、反射、注解 立即下载