Minestom/src/main/java/net/minestom/server/utils/clone/CloneUtils.java

31 lines
893 B
Java
Raw Normal View History

package net.minestom.server.utils.clone;
import org.jetbrains.annotations.NotNull;
2020-12-15 03:40:07 +01:00
import org.jetbrains.annotations.Nullable;
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.
*/
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;
}
@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;
}
}