public final class DemoPonte {
    static class Deposito<T> {
        private T valore;

        void imposta(T nuovo) {
            valore = nuovo;
        }

        T leggi() {
            return valore;
        }
    }

    static final class DepositoTitoli extends Deposito<String> {
        @Override
        void imposta(String nuovo) {
            super.imposta(nuovo.strip());
        }
    }

    private DemoPonte() { }

    public static void main(String[] args) {
        Deposito<String> deposito = new DepositoTitoli();
        deposito.imposta("  Java  ");
        System.out.println(deposito.leggi());
    }
}
