Java PMD错误-AvoidThrowingRawExceptionTypes

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 { ..... /**

我有一个类,如下所示,当我运行PMD规则时,我通过rawExceptionTypes获得类型为
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可能是真正的邪恶)