Java 子类抛出UnsupportedOperationException与忽略输入参数
假设我有一个类,如类名所示,这个类不允许自动提交 所以我的问题是,如果最好像下面这样保留它(空正文,可能添加一些日志@WARN/ERROR level)或抛出UnsupportedOperationExceptionJava 子类抛出UnsupportedOperationException与忽略输入参数,java,inheritance,jdbc,subclass,liskov-substitution-principle,Java,Inheritance,Jdbc,Subclass,Liskov Substitution Principle,假设我有一个类,如类名所示,这个类不允许自动提交 所以我的问题是,如果最好像下面这样保留它(空正文,可能添加一些日志@WARN/ERROR level)或抛出UnsupportedOperationException public class NoAutoCommitConnection implements java.sql.Connection { public void setAutoCommit(boolean autoCommit) throws SQLException {
public class NoAutoCommitConnection implements java.sql.Connection {
public void setAutoCommit(boolean autoCommit) throws SQLException {
}
}
实际上,如果(autoCommit){throw new UnsupportedOperationException();},我会选择
,因为它清楚地表明不支持自动提交,但不会失败setAutoCommit(false)
调用
不实现这个方法或者说它的意图破坏了接口的契约
我认为在这种情况下,您至少可以在运行时抛出一个异常。您到底在问什么?java.sql.Connection
的一致性实现必须始终支持setAutoCommit
,JDBC规范不允许不实现它(或抛出UnsupportedOperationException
或SQLFeatureNotSupportedException
)。在MySQL中,MyISAM引擎是非事务性的,驱动程序允许调用setAutoCommit
,但实际上,当使用MyISAM引擎连接到数据库时,会忽略它。