【问题标题】:How to create instance of org.springframework.dao.DataAccessException?如何创建 org.springframework.dao.DataAccessException 的实例?
【发布时间】:2012-06-26 01:58:41
【问题描述】:

我需要创建 JUnit 测试来处理 DataAccessException,

但是当我尝试时:

            throw new DataAccessException();

接收:

 Cannot instantiate the type DataAccessException

为什么?我能做些什么? 谢谢。

【问题讨论】:

    标签: java database spring hibernate exception


    【解决方案1】:

    DataAccessException 是一个抽象类,不能被实例化。而是使用具体类之一,例如 new DataRetreivalFailureException("this was the reason") 或创建您自己的:

    throw new DataAccessException("this was the reason") {};
    

    你会得到一个派生自 DataAccessException 的匿名类。

    【讨论】:

    • 我试图抛出NonTransientDataAccessException,它扩展了DataAccessException,但也是抽象。我现在可以抛出DataRetrievalFailureException,它扩展了NonTransientDataAccessException,并且不是抽象。谢谢,你的回答对我很有帮助。
    【解决方案2】:

    为什么?

    仅仅是因为DataAccessExceptionabstract class。你不能实例化一个抽象类。

    我能做什么?

    如果您检查层次结构:

    extended by java.lang.RuntimeException
                  extended by org.springframework.core.NestedRuntimeException
                      extended by org.springframework.dao.DataAccessException
    

    由于NestedRuntimeException 也是抽象的,你可以抛出一个new RuntimeException(msg);(不推荐)。您可以选择其他答案的建议 - 使用其中一个具体类。

    【讨论】:

      【解决方案3】:

      如果您查看源代码,您会发现它是一个抽象类,请查看:

      package org.springframework.dao;
      
      import org.springframework.core.NestedRuntimeException;
      
      public abstract class DataAccessException extends NestedRuntimeException {
          public DataAccessException(String msg) {
              super(msg);
          }
      
          public DataAccessException(String msg, Throwable cause) {
              super(msg, cause);
          }
      }
      

      如您所知,抽象类无法扩展...

      但你可以用其他方式使用它,这是一种使用方式,例如:

      public interface ApiService {
          Whatever getSomething(Map<String, String> Maps) throws DataAccessException;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-02
        • 2013-05-08
        相关资源
        最近更新 更多