我有一个名为 X 的类,它实现了 java.sql 包中的 Connection 接口(interface)。我们使用的是 java 1.6,一切工作正常。Oracle 在 java 1.7 的 Connection 接口(interface)中引入了一些新方法。当我使用以下命令构建代码时JRE设置为1.7(在Eclipse的构建路径中)代码无法编译并出现以下错误
BrmPcmConnection类型必须实现继承的抽象方法Connection.abort(Executor)
我知道 Connection.abort 是 Java 7 中引入的新方法,我需要实现它。我有使用 1.6 编译的相同代码,它在 1.7 JRE 上运行良好!
请帮我理解,为什么代码编译时出错,但运行时却没有异常。是否是因为运行时没有人调用新方法?
最佳答案
当您编译应用程序时,您必须实现父类(super class)的所有抽象方法。但是,假设您有一个已编译的程序,并且通过添加方法来更改父类(super class)或接口(interface),会发生什么?
JVM 将尝试运行该程序,只要您实际上没有调用该方法,这一切都很好。如果您调用该方法(如果您在没有该方法的版本中进行编译,则很难做到这一点),您将收到运行时错误。
但是不要调用您没有的方法,它就可以正常工作。
如果您没有这些方法的实现,我建议添加
// @Override
public void setSchema(String pSchema) throws SQLException {
throw new UnsupportedOperationException();
}
在这种情况下,您还可以抛出 new SQLException("Not Implemented")
。
注意:我已经注释掉了@Override
,因此它仍然可以在旧版本中编译。
关于java - 我的代码编译时出现错误,但在运行时执行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39347943/