使用点运算符在java中调用奇数方法来访问通用列表

 瞄瞄摩卡李流 发布于 2023-01-31 20:49

我遇到了一些高级的java代码(对我来说很先进:))我需要帮助理解.

在类中有一个嵌套类,如下所示:

private final class CoverageCRUDaoCallable implements
        Callable>
{
    private final long oid;
    private final long sourceContextId;

    private CoverageCRUDaoCallable(long oid, long sourceContextId)
    {
        this.oid = oid;
        this.sourceContextId = sourceContextId;
    }

    @Override
    public List call() throws Exception
    {
        return coverageCRUDao.getCoverageCRUData(oid, sourceContextId);
    }
}

稍后在外部类中,创建了一个可调用类的实例.我不知道这是什么:

ConnectionHelper.> tryExecute(coverageCRUDaoCallable);

它对我来说看起来不像java语法.你能详细说明这种神秘的语法会发生什么吗?您可以在代码摘录中看到它在下面使用.

CoverageCRUDaoCallable coverageCRUDaoCallable = new CoverageCRUDaoCallable(
        dalClient.getOid(), sourceContextId);

// use Connection helper to make coverageCRUDao call.
List coverageCRUList = ConnectionHelper
        .> tryExecute(coverageCRUDaoCallable);

EDITED 添加了ConnectionHelper类.

public class ConnectionHelper
{
    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 tryExecute(Callable 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;
    }

Chris Martin.. 24

您通常认为类是通用的,但方法也可以是通用的.一个常见的例子是Arrays.asList.

大多数情况下<...>,即使在调用泛型方法时,也不必使用尖括号的语法,因为这是Java编译器在某些情况下实际能够进行基本类型推断的地方. .例如,Arrays.asList文档中给出的代码段省略了类型:

List stooges = Arrays.asList("Larry", "Moe", "Curly");

但它相当于这个版本,其中明确给出了泛型类型:

List stooges = Arrays.asList("Larry", "Moe", "Curly");

这只是一个惯例问题.如果你愿意,有很多地方可以插入多余的空格.你也可以写`List stooges = Arrays. asList("Larry","Moe","Curly");`.您甚至可以在任何这些地方插入换行符.` (6认同)


assylias.. 10

这是因为,在Java 7之前,泛型不完全支持目标类型,因此您需要使用所谓的类型见证来帮助编译器ConnectionHelper.>.

但请注意,Java 8显着改进了目标类型,在特定示例中,Java 8中不需要类型见证.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有