Я столкнулся с некоторым продвинутым java-кодом (продвинутым для меня:)) Мне нужна помощь.
В классе есть вложенный класс, как показано ниже:
private final class CoverageCRUDaoCallable implements
        Callable<List<ClientCoverageCRU>>
{
    private final long oid;
    private final long sourceContextId;
    private CoverageCRUDaoCallable(long oid, long sourceContextId)
    {
        this.oid = oid;
        this.sourceContextId = sourceContextId;
    }
    @Override
    public List<ClientCoverageCRU> call() throws Exception
    {
        return coverageCRUDao.getCoverageCRUData(oid, sourceContextId);
    }
}
Позже во внешнем классе создается экземпляр вызываемого класса. Я не знаю, что это такое:
ConnectionHelper.<List<ClientCoverageCRU>> tryExecute(coverageCRUDaoCallable);
Это не похоже на синтаксис Java. Не могли бы вы рассказать, что происходит в этом загадочном синтаксисе? Вы можете видеть, что он используется ниже в выдержке кода.
CoverageCRUDaoCallable coverageCRUDaoCallable = new CoverageCRUDaoCallable(
        dalClient.getOid(), sourceContextId);
// use Connection helper to make coverageCRUDao call.
List<ClientCoverageCRU> coverageCRUList = ConnectionHelper
        .<List<ClientCoverageCRU>> tryExecute(coverageCRUDaoCallable);
EDITED добавлен класс ConnectionHelper.
public class ConnectionHelper<T>
{
    private static final Logger logger =
        LoggerFactory.getLogger(ConnectionHelper.class);
    private static final int    CONNECTION_RETRIES = 3;
    private static final int    MIN_TIMEOUT        = 100;
    public static <T> T tryExecute(Callable<T> command)
    { 
        T returnValue = null;
        long delay = 0;
        for (int retry = 0; retry < CONNECTION_RETRIES; retry++)
        { 
            try
            { 
                // Sleep before retry
                Thread.sleep(delay);
                if (retry != 0)
                {
                    logger.info("Connection retry #"+ retry);
                }
                // make the actual connection call
                returnValue = command.call();
                break;
            } 
            catch (Exception e)
            {
                Throwable cause = e.getCause();
                if (retry == CONNECTION_RETRIES - 1)
                {
                    logger.info("Connection retries have exhausted. Not trying "                        
                            + "to connect any more.");
                    throw new RuntimeException(cause);
                }
                // Delay increased exponentially with every retry.
                delay = (long) (MIN_TIMEOUT * Math.pow(2, retry));
                String origCause = ExceptionUtils.getRootCauseMessage(e);
                logger.info("Connection retry #" + (retry + 1)
                        + " scheduled in " + delay + " msec due to "
                        + origCause);
                        + origCause);
            }
        }
        return returnValue;
    }