001package com.ericlam.mc.minigames.core.function;
002
003/**
004 * 可以被形態轉換的容器
005 *
006 * @param <E> 根形態
007 */
008public interface Castable<E> {
009
010    /**
011     * 轉換形態到子容器
012     * <p>
013     * 相當於
014     * <code>
015     * Child child = (Child)root;
016     * </code>
017     *
018     * @param cls 子容器類
019     * @param <T> 容器形態
020     * @return 子容器
021     */
022    default <T extends E> T castTo(Class<T> cls) {
023        return cls.cast(this);
024    }
025
026}