2020-12-15 03:29:47 +01:00
|
|
|
package net.minestom.server.utils.clone;
|
|
|
|
|
|
|
|
import org.jetbrains.annotations.NotNull;
|
2020-12-15 03:40:07 +01:00
|
|
|
import org.jetbrains.annotations.Nullable;
|
2020-12-15 03:29:47 +01:00
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.concurrent.CopyOnWriteArrayList;
|
|
|
|
|
2020-12-15 04:21:26 +01:00
|
|
|
/**
|
|
|
|
* Convenient interface to deep-copy single object or collections.
|
|
|
|
* <p>
|
|
|
|
* Most of the methods require object to implement the {@link PublicCloneable} interface.
|
|
|
|
*/
|
2020-12-15 03:29:47 +01:00
|
|
|
public final class CloneUtils {
|
|
|
|
|
2020-12-15 03:40:07 +01:00
|
|
|
@Nullable
|
|
|
|
public static <T extends PublicCloneable> T optionalClone(@Nullable T object) {
|
|
|
|
return object != null ? (T) object.clone() : null;
|
|
|
|
}
|
|
|
|
|
2020-12-15 03:29:47 +01:00
|
|
|
@NotNull
|
|
|
|
public static <T extends PublicCloneable> CopyOnWriteArrayList cloneCopyOnWriteArrayList(@NotNull List<T> list) {
|
|
|
|
CopyOnWriteArrayList<T> result = new CopyOnWriteArrayList<>();
|
|
|
|
for (T element : list) {
|
|
|
|
result.add((T) element.clone());
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|