mirror of
https://github.com/dmulloy2/ProtocolLib.git
synced 2024-09-29 07:37:29 +02:00
44 lines
1.2 KiB
Java
44 lines
1.2 KiB
Java
/**
|
|
* (c) 2018 dmulloy2
|
|
*/
|
|
package com.comphenix.protocol.reflect.cloning;
|
|
|
|
import java.util.Optional;
|
|
import java.util.OptionalInt;
|
|
|
|
/**
|
|
* A cloner that can clone Java Optional objects
|
|
* @author dmulloy2
|
|
*/
|
|
public class JavaOptionalCloner implements Cloner {
|
|
protected Cloner wrapped;
|
|
|
|
public JavaOptionalCloner(Cloner wrapped) {
|
|
this.wrapped = wrapped;
|
|
}
|
|
|
|
@Override
|
|
public boolean canClone(Object source) {
|
|
return source instanceof Optional || source instanceof OptionalInt;
|
|
}
|
|
|
|
@Override
|
|
public Object clone(Object source) {
|
|
if (source instanceof Optional) {
|
|
Optional<?> optional = (Optional<?>) source;
|
|
return optional.map(o -> wrapped.clone(o));
|
|
} else if (source instanceof OptionalInt) {
|
|
// why Java felt the need to make each optional class distinct is beyond me
|
|
// like why couldn't they have given us at least a common interface or something
|
|
OptionalInt optional = (OptionalInt) source;
|
|
return optional.isPresent() ? OptionalInt.of(optional.getAsInt()) : OptionalInt.empty();
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public Cloner getWrapped() {
|
|
return wrapped;
|
|
}
|
|
}
|