Java 如何创建org.springframework.dao.DataAccessException的实例?
我需要创建JUnit测试来处理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
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
,并且不是抽象的。谢谢,你的回答真的帮助了我。