All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.digitalid.utility.casting.Castable Maven / Gradle / Ivy

The newest version!
package net.digitalid.utility.casting;

import javax.annotation.Nonnull;

import net.digitalid.utility.annotations.method.Pure;
import net.digitalid.utility.contracts.Require;
import net.digitalid.utility.validation.annotations.method.Chainable;
import net.digitalid.utility.validation.annotations.type.Mutable;

/**
 * This interface provides an easy way to cast an object to a subclass.
 */
@Mutable
public interface Castable {
    
    /* -------------------------------------------------- Casting -------------------------------------------------- */
    
    /**
     * Casts this object to the given target class.
     * 
     * @require targetClass.isInstance(this) : "This object is an instance of the given target class.";
     */
    @Pure
    public default @Chainable  @Nonnull T castTo(@Nonnull Class targetClass) {
        Require.that(targetClass.isInstance(this)).orThrow("This object $ has to be an instance of the target class $.", this, targetClass);
        
        return targetClass.cast(this);
    }
    
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy