Java PMD错误-AvoidThrowingRawExceptionTypes
我有一个类,如下所示,当我运行PMD规则时,我通过rawExceptionTypes获得类型为Java PMD错误-AvoidThrowingRawExceptionTypes,java,exception-handling,pmd,Java,Exception Handling,Pmd,我有一个类,如下所示,当我运行PMD规则时,我通过rawExceptionTypes获得类型为avoid的PMD警报。我无法解决这个问题,因为当我在constructor throws子句中添加任何其他异常类型时,都会出现错误 new PersistenceManager(CommonConstants.IP_DB) 如何解决这个问题?有人能帮我吗 public class PersistenceManager implements CommonConstants { ..... /**
avoid的PMD警报。我无法解决这个问题,因为当我在constructor throws子句中添加任何其他异常类型时,都会出现错误
new PersistenceManager(CommonConstants.IP_DB)
如何解决这个问题?有人能帮我吗
public class PersistenceManager implements CommonConstants {
.....
/**
* Stores the persistence mgr for IPMasterData_DB
*/
public static PersistenceManager IPMasterData_DB = new PersistenceManager(
CommonConstants.IP_DB);
/**
* Configures the data source according to the resource passed.
*
* @param dbName
* Databasename
*/
protected PersistenceManager(String dbName) throws Exception{
String resourceName = "";
if (LOGGER == null) {
LOGGER = Logger.getLogger(PersistenceManager.class);
}
try {
resourceName = getConfigFileName(dbName);
this.sessionFactory = new Configuration().configure(resourceName)
.setProperty("hibernate.jdbc.batch_size",
PersistenceManager.getBatchSize(dbName))
.buildSessionFactory();
} catch (HibernateException ex) {
ex.printStackTrace();
LOGGER
.error("Exception building SessionFactory for configKey ",
ex);
throw new RuntimeException(ErrorConstants.SESSIONFACTORY_BUILD, ex);
}
}
}
抛出特殊异常而不是泛型异常是一种很好的编程实践PMD
可以检测并就此向您提供建议,这正是我们所做的
将您的异常包装在一个专门的异常中并抛出它,而不是抛出一个RuntimeException
的实例。据我所知,PMD批评的不是throws子句,而是抛出新的RuntimeException(..
。您可以让throws子句保持原样,但抛出一个新的(更具体的)运行时异常。PMD指编程错误检测器。
java最好抛出特定的错误/异常,而不是抛出泛型/通用异常
例如-ArrayIndexOutOfBoundsException是java中RuntimeException的一个子类。如果您知道您的代码在某个时候可能会抛出ArrayIndexOutOfBoundsException,那么您必须抛出ArrayIndexOutOfBoundsException,而不是一般的异常-RuntimeException。PMD只是说抛出原始ex是一种容易出错的习惯概念。您可以删除关于抛出异常的规范,因为您的构造函数只抛出RuntimeException
。但关于设计仍然存在一些悬而未决的问题:1)hibernate异常是否真的很罕见且出乎意料,2)如作者所说,如果在该错误之后可以修复的状态-他在Singelton初始化中得到编译错误(我们都知道Singelton可能是真正的邪恶)