Java 如何创建org.springframework.dao.DataAccessException的实例?

Java 如何创建org.springframework.dao.DataAccessException的实例?,java,database,spring,hibernate,exception,Java,Database,Spring,Hibernate,Exception,我需要创建JUnit测试来处理DataAccessException 但当我尝试时: throw new DataAccessException(); 收到: Cannot instantiate the type DataAccessException 为什么??我能做什么? 谢谢 为什么? 仅仅因为DataAccessException是。不能实例化抽象类 我能做什么 如果检查层次结构: extended by java.lang.RuntimeExceptio

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

但当我尝试时:

            throw new DataAccessException();
收到:

 Cannot instantiate the type DataAccessException
为什么??我能做什么? 谢谢

为什么?

仅仅因为
DataAccessException
是。不能实例化抽象类

我能做什么

如果检查层次结构:

extended by java.lang.RuntimeException
              extended by org.springframework.core.NestedRuntimeException
                  extended by org.springframework.dao.DataAccessException
由于
NestedRuntimeException
也是抽象的,因此可以抛出
newRuntimeException(msg)(不建议使用)。你可以按照另一个答案的建议去做——使用一个具体的类。

DataAccessException是一个抽象类,不能实例化。而是使用一个具体类,例如new DataRetreivalFailureException(“这就是原因”),或者创建自己的:

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

您将获得一个从DataAccessException派生的匿名类。

如果查看源代码,您将注意到它是一个抽象类,请查看:

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;
}
公共接口服务{
无论什么getSomething(映射)抛出DataAccessException;
}

我试图抛出
非TransientDataAccessException
,它扩展了
DataAccessException
,但也是抽象的。我现在可以抛出
DataRetrievalFailureException
,它扩展了
非TransientDataAccessException
,并且不是抽象的。谢谢,你的回答真的帮助了我。