java通過反射修改變量的值

修改帶有將帶有annotation的變量
需要setAccessible(true)後才能修改變量的值

public BaseCrawlerRequest convertToCrawlerBean(BaseCrawlerRequest bean) throws Exception {
        Field nameField = getNameField(bean.getClass());
        nameField.setAccessible(true);
        String nameValue = (String) nameField.get(bean);
        if (StringUtils.isNotEmpty(this.type)) {
            if (StringUtils.isNotEmpty(nameValue)) {
                nameField.set(bean, this.type + EnumConstant.CONNECT_FIELD + nameValue);
            } else {
                nameField.set(bean, this.type);
            }
        }
        return this;
    }

找到帶有@NameField的Field

private Field getNameField(Class clazz) throws Exception {
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            for (Annotation ann : field.getDeclaredAnnotations()) {
                if (ann.annotationType() == NameField.class) {
                    return field;
                }
            }
        }
        throw new Exception("BaseCrawlerRequest getgetNameField failed. no annotation @NameField in " + clazz.getName());
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章