3

我有一个类如下,当我运行 PMD 规则时,我得到一个 PMD Alert 类型AvoidThrowingRawExceptionTypes。我无法解决这个问题,因为当我在构造函数 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);
                }
            }
}
4

3 回答 3

4

抛出专门的异常而不是一般的异常是一种很好的编程习惯。PMD可以检测到并就此向您提供建议,而这正是我们所做的。

将您的异常包装在一个专门的异常中并抛出它,而不是抛出RuntimeException.

于 2012-08-22T14:30:31.760 回答
1

据我了解,PMD 批评的不是 throws 子句而是throw new RuntimeException(... 您可以让 throws 子句保持原样,但抛出一个新的(更具体的)RuntimeException。

于 2013-05-08T06:58:56.053 回答
0

PMD 指的是编程错误检测器。一个好的做法是 java 抛出特定的错误/异常,而不是抛出通用/一般异常。

例如,ArrayIndexOutOfBoundsException 是 java 中 RuntimeException 的子类。如果您知道您的代码可能会在某些时候抛出 ArrayIndexOutOfBoundsException,但您必须抛出 ArrayIndexOutOfBoundsException 而不是一般异常 -RuntimeException。

于 2021-04-23T07:32:52.143 回答