我的代码编译错误但在运行时执行正常

时间:2016-09-06 11:27:34

标签: java eclipse interface compiler-errors runtime

我有一个名为X的类,它实现了java.sql包中的Connection接口。我们正在使用java 1.6,一切正常.Oracle在java 1.7的Connection接口中引入了4个新方法。当我构建我的代码时JRE设置为1.7(在Eclipse的构建路径中)代码无法编译并具有以下错误

BrmPcmConnection类型必须实现继承的抽象方法Connection.abort(Executor)

我理解Connection.abort是Java 7中引入的新方法,我需要实现它。我有相同的代码,使用1.6编译,它在1.7 JRE上运行良好!

请帮助我理解,为什么代码会编译错误但在运行时没有异常。是不是因为在运行时没有人调用新方法?

1 个答案:

答案 0 :(得分:2)

编译应用程序时,必须实现超类的所有抽象方法。但是,假设您有一个已经编译的程序,并且您通过添加一个方法来更改超类或接口会发生什么?

JVM将尝试运行该程序,如果您实际上没有调用该方法,这一切都很好。如果你调用这个方法,如果你在一个没有它的版本中编译就很难,那么你将得到一个运行时错误。

但是不要打电话给你没有的方法,这一切都有效。

如果您没有这些方法的实现,我建议添加

// @Override 
public void setSchema(String pSchema) throws SQLException { 
    throw new UnsupportedOperationException();
}

在这种情况下你也可以throw new SQLException("Not implemented")

注意:我已注释掉@Override,因此它仍会在旧版本中编译。