Use Set to track ignored properties in BeanUtils.copyProperties()

Closes gh-30088
This commit is contained in:
liupeng 2023-03-09 02:07:57 +08:00 committed by Sam Brannen
parent 1acbc97b16
commit d2868f5dd0
1 changed files with 3 additions and 2 deletions

View File

@ -29,6 +29,7 @@ import java.time.temporal.Temporal;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
@ -791,11 +792,11 @@ public abstract class BeanUtils {
actualEditable = editable; actualEditable = editable;
} }
PropertyDescriptor[] targetPds = getPropertyDescriptors(actualEditable); PropertyDescriptor[] targetPds = getPropertyDescriptors(actualEditable);
List<String> ignoreList = (ignoreProperties != null ? Arrays.asList(ignoreProperties) : null); Set<String> ignoreSet = (ignoreProperties != null ? new HashSet<>(Arrays.asList(ignoreProperties)) : null);
for (PropertyDescriptor targetPd : targetPds) { for (PropertyDescriptor targetPd : targetPds) {
Method writeMethod = targetPd.getWriteMethod(); Method writeMethod = targetPd.getWriteMethod();
if (writeMethod != null && (ignoreList == null || !ignoreList.contains(targetPd.getName()))) { if (writeMethod != null && (ignoreSet == null || !ignoreSet.contains(targetPd.getName()))) {
PropertyDescriptor sourcePd = getPropertyDescriptor(source.getClass(), targetPd.getName()); PropertyDescriptor sourcePd = getPropertyDescriptor(source.getClass(), targetPd.getName());
if (sourcePd != null) { if (sourcePd != null) {
Method readMethod = sourcePd.getReadMethod(); Method readMethod = sourcePd.getReadMethod();