我正在尝试使用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;
}
答案 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;错误/警告,其中有一个包含这些消息的通用类型折叠
将它们置于忽略状态也应删除工具提示。