Eclipse显示推断通用类型参数 - 想要删除此警告而不抑制它

时间:2014-06-12 10:08:48

标签: java eclipse generics svnkit

我正在尝试使用SVNKit从svn存储库获取所有日志。它工作正常,但看到了推断泛型类型参数警告消息。我试图抛出这条线

repository.log(new String[]{""}, null, START_REVISION, HEAD_REVISION, true, true);

Collection<SVNLogEntry>

但仍有警告。是否可以在不抑制它的情况下删除此警告?

    private Collection<SVNLogEntry> getAllSvnLogsFromStart_Revision()   {
    DAVRepositoryFactory.setup();
    SVNRepository repository = null;
    Collection<SVNLogEntry> logEntries = null;
    try {
        repository = SVNRepositoryFactory.create( SVNURL.parseURIEncoded( SVN_URL ) );
        ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(userName, passWord);
        repository.setAuthenticationManager(authManager);          
        logEntries = repository.log(new String[]{""}, null, START_REVISION, HEAD_REVISION, true, true);
    }catch (SVNException e) {
        e.printStackTrace();
    }
    return logEntries;
}

warning message


svnkit api

2 个答案:

答案 0 :(得分:2)

由于SVNRepository.log()会返回原始Collection类型,因此您必须处理未经检查的转化。最简洁的方法是通过将@SuppressWarnings字段应用于变量声明来最小化@SuppressWarnings("unchecked") Collection<SVNLogEntry> logEntries = repository.log(new String[]{""}, null, START_REVISION, HEAD_REVISION, true, true); return logEntries; 字段:

{{1}}

答案 1 :(得分:1)

未经检查的警告无法通过直接转换解决,因为Java无法静态定义操作的类型安全性,因为不知道数组的内容;解决方案是使java知道数组的内容:

    Collection<SVNLogEntry> typesafe = new ArrayList<SVNLogEntry>();

    for (Object o : repository.log(new String[]{""}, null, START_REVISION, HEAD_REVISION, true, true)) {
        typesafe.add((SVNLogEntry)o);
    }

这会带来性能损失,但允许运行时确定键入的数组内容是什么,并使警告消失。

但是,如果您正在寻找一种不使用SuppressWarning来抑制警告的替代方法,那么就会有另一条路线(遗憾地适用于整个项目):

要禁用警告而不禁止警告,您可以转到首选项,在java&gt;下编译器&gt;错误/警告,其中有一个包含这些消息的通用类型折叠

warning configuration

将它们置于忽略状态也应删除工具提示。