java - 使用反射设置属性的属性

标签 java reflection

假设我们有一个类结构:

class Street {
    String name;
    List<Building> buildings;
}

class Building {
    String number;
    int floors;
    List<Apartment> apartments;
}

class Apartment {
    String owner;
}

我对运行时中的上述结构一无所知。我所拥有的只是一个对象和一个String参数,其中包含有关我必须分配的属性的数据。

例如,字符串 "buildings.0/floors#5" 表示我必须将列表中第一栋建筑物的楼层属性分配为 5。而字符串 "buildings.0/Apartments.1/owner#Luke" 表示我必须将第一栋楼的公寓列表中第二套公寓的所有者属性(property)分配给“Luke”。

我知道如何使用反射分配属性。但是,如果我们必须分配属于类本身的属性的属性怎么办?这样的逻辑可以实现吗?

最佳答案

如果您的类遵循 JavaBeans 约定(标准 getter 和 setter 封装字段),则可以使用 Introspector ,以及依赖它的几个框架。

我最喜欢的例子是 Spring's BeanWrapper technology ,它允许您编写如下代码:

BeanWrapper bw = new BeanWrapperImpl(street);
bw.setPropertyValue("buildings[0].appartments[1].owner", "luke");

关于java - 使用反射设置属性的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41183401/

相关文章:

reflection - Clojure 列出 leiningen 命名空间

java - ReflectionUtil getField 抛出 NullPointerException

c# - 有没有办法通过反射或其他方式获取实体 ID 字段的名称?

java - 避免由于 Log4j 中的默认行为而多次记录同一消息

java - 用随机列表中的 2 个值填充 2D 数组(2048 游戏)

Java 将 List 参数作为引用

java - 重新排序滚动 Pane 中的面板

java - 为什么我的 java 交换功能不起作用?

c# - 将锁定防止通过反射完成的更改

java:从类中查找项目名称