java - 我的代码编译时出现错误,但在运行时执行良好

标签 java eclipse interface compiler-errors runtime

我有一个名为 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/

相关文章:

java - 澄清 Object 类中的 finalize() 方法

java - 匹配每个单词的第一个字符

eclipse - 在 org.apache.hadoop.examples.WordCount.main(WordCount.java :84)

eclipse - IOException : Type mismatch in key from map: Text, 收到 LongWritable

interface - typescript 函数接口(interface)

c# - 接口(interface)类型转换

JAVA:如何将消息框与多个输出结合起来

Java 没有绘制所需的图形

eclipse - 在eclipse中,我可以自定义委托(delegate)方法代码模板吗?

java - 如何替换已弃用的类方法?