Java Hashmap almacena solo el valor de un tipo particular en la clave

Estoy buscando crear una clase de Hashmap que me permita almacenar claves y valores. Sin embargo, el valor solo se puede almacenar si coincide con un tipo específico, y el tipo depende de la valor de tiempo de ejecución de la llave. Por ejemplo, si la clave esEMAIL(String.class), entonces el valor almacenado debe ser del tipoString.

Tengo el siguiente ENUM personalizado:

public enum TestEnum {
    TDD,
    BDD,
    SHIFT_RIGHT,
    SHIFT_LEFT;
}

He creado la siguiente clase:

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;

public class test {

    private static final Map<ValidKeys, Object> sessionData = new HashMap<>();

    public enum ValidKeys {
        EMAIL(String.class),
        PASSWORD(String.class),
        FIRST_NAME(String.class),
        LAST_NAME(String.class),
        CONDITION(TestEnum.class);

        private Class type;
        private boolean isList;
        private Pattern pattern;

        ValidKeys(Class<?> type, boolean isList) {
            this.type = type;
            this.isList = isList;
        }

        ValidKeys(Class<?> type) {
            this.type = type;
        }
    }

    public <T> void setData(ValidKeys key, T value) {
        sessionData.put(key,value);
    }


    public Object getData(ValidKeys key) {
        return key.type.cast(sessionData.get(key));
    }


    public static void main(String[] args) {
        test t = new test();
        t.setData(ValidKeys.CONDITION,TestEnum.TDD);
        System.out.println(t.getData(ValidKeys.CONDITION));
    }
}

Me gustaría usar métodos comosetData ygetData y almacenar valores ensessionData. Además, quiero asegurarme de que si el valor es una lista de objetos, también se almacena correctamente.

También estoy luchando por evitar toString, básicamente necesito un getData genérico que pueda funcionar sin conversión de tipo.

Respuestas a la pregunta(1)

Su respuesta a la pregunta