通过java反射将一个对象的状态复制到另一个对象(线性复杂性)

时间:2016-08-08 14:49:55

标签: java algorithm search reflection

想象一下,我有两个对象(“来自”和“来”) 我需要为所有的getter扫描对象“from”。如果对象“to”包含对应的setter,它将调用它来设置“to”的属性值,该属性值等于“from”的属性。
setter中的类型应与getter返回的值兼容(如果不兼容,则不执行调用)。 兼容意味着setter中的参数类型应该相同或者是getter的返回类型的超类。 我确信我知道解决这个任务的方法。我需要写一些方法“assign”,例如:

public static void assign(Object to, Object from) {
    Class<?> classTo = to.getClass();
    Class<?> classFrom = from.getClass();
    Method[] methodsTo = classTo.getMethods();
    Method[] methodsFrom = classFrom.getMethods();

    for (Method methodFrom : methodsFrom) {
        if...
    }
}

对于每个get-method,我需要遍历set-methods列表,并调用get-method传递的结果作为对应set-method的参数。
在这种情况下,该算法的复杂度将为n * m(其中n - 第一类中的方法数量,m - 秒)。
所以我的问题是 - 如何用复杂度等于n + m的算法来解决这个任务? 有没有任何众所周知的算法,或者我应该使用某些数据结构之一的实现(例如hashmap)? 提前谢谢。

0 个答案:

没有答案