ConstraintSet 中 clone() 的不同实现有什么区别?

What is the difference between the different implementations of clone() in ConstraintSet?

根据docs for ConstraintSetclone()方法有3种实现方式:

文档中对每个版本的解释有点模糊,所以我不太清楚这三个版本之间的区别是什么以及我应该在什么时候使用它们。我已经能够在需要时毫无问题地使用第一个。

ConstraintSet 包含此私有字段:

private HashMap<Integer, ConstraintSet.Constraint> mConstraints;

三个 clone() 方法中的每一个都将从此 Map 中删除所有现有条目,然后根据您传入的内容将其填回。本质上,这些方法中的每一个都会将调用它们的任何 ConstraintSet 个实例变成参数的副本。

void clone(ConstraintSet set)

此版本清除 mConstraints 映射并使用传入的 ConstraintSet 中的约束重新填充它。

void clone(ConstraintLayout constraintLayout)

此版本清除 mConstraints 映射并使用任何必要的约束重新填充它以生成传入的副本 ConstraintLayout.

void clone(Context context, int constraintLayoutId)

此版本使用传入的Context和layout id从布局资源中inflate出一个ConstraintLayout实例,然后调用clone(ConstraintLayout)(上述方法)