/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.runtime.core.api.util;
/**
* A component that knows how to create copies of itself.
*
* @param <T> the generic type of class implementing this interface
* @since 3.8
*/
public interface Copiable<T> {
/**
* Creates a new copy of {@code this} instance.
* <p/>
* Each invocation to this method is expected to return a different instance. However, no guarantee is offered about the copy
* being deep or shallow. That's up to each implementation.
* <p/>
* Implementations are expected to be thread-safe
*
* @return A new copy of {@code this} instance
*/
T copy();
}